如何将binutils和gcc一起编译?

vuktfyat  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(133)

根据gcc build instructions,你可以在构建gcc(以及gmp,mpc等)的同时构建binutils。
这是那页上写的
如果您还打算构建binutils(升级现有安装或用于替代操作系统的相应工具),请将binutils发行版解压到同一目录或单独的目录中。在后一种情况下,将您打算与编译器一起构建的binutils的任何组件(bfd,binutils,gas,gprof,ld,opcodes,...)的符号链接添加到包含GCC源代码的目录中。
同样,GMP、MPFR和MPC库可以与GCC一起自动构建。在包含GCC源的目录中解包GMP、MPFR和/或MPC源分发,并将其目录分别重命名为gmp、mpfr和mpc(或使用具有相同名称的符号链接)。
这对于gmp,mpc,mpfr来说很好用,但是我似乎不能让它构建所有的binutils。我也不知道如何让它从binutils构建新的gold链接器。有问题的版本是gcc-4.4.2和binutils-2.20。
一步一步的指导将是伟大的(对我来说,并为其他谁遇到这个问题以及)。

9jyewag0

9jyewag01#

这应该仍然支持OK,因为它通常用于构建交叉编译器。
事实上,我刚刚在gcc 4.6.0和binutils 2.21(gmp、mpc和mpfr在适当的版本)上完成了这一操作,下面的操作似乎很好:

  • 把你要构建的东西的所有归档文件(gcc-4.6.0.tar.bz2,binutils-2.21.tar.bz2等)放到一个新的目录中,例如:src
  • 将它们全部解压缩到这个目录中,这样您就得到了gcc-4.6.0/binutils-2.21/gmp-5.0.2/和更多的文件

tar jxvf gcc-4.6.0.tar.bz2...(在这里解压缩其他文件,观看文件列表滚动过去)

  • cd gcc-4.6.0和symlink gmp、mpc和mpfr目录,链接中不包含其版本号,例如:

ln -s ../gmp-5.0.2 gmp

  • 现在,符号链接binutils目录中不存在于gcc目录中的所有内容,因此已经存在的内容将优先,但binutils工具将对构建可见:

/binutils-2.21/* ; do ln -s“${file}”;完成

  • 更改一个目录,并创建一个构建目录,将所有这些内容单独构建到源代码中(这一直是推荐的方法,并且它往往比在源目录中构建更可靠):

cd .. ; mkdir build

  • 此时,您应该有一组目录和链接,看起来像这样:

binutils-2.21/ build/ gcc-4.6.0/ gmp -〉../gmp-5.0.2 mpc -〉../mpc-0.9 mpfr -〉../mpfr-3.0.1 bfd -〉../binutils-2.21/bfd binutils -〉../binutils-2.21/binutils gas -〉../binutils-2.21/gas ...(这里有很多binutils的符号链接,以及现有的gcc内容)gmp-5.0.2/ mpc-0.9/ mpfr-3.0.1/

  • 从该目录配置整个批次,使用您需要传递的任何选项进行配置:

../gcc-4.6.0/configure --prefix=/foo/bar --enable-languages=c,c++,ada

  • 构建,等待,安装(你可能想在这里使用make -j4来并行地获得一些构建,因为这需要一段时间):

make -j4 ; make install
如果还没有的话,将目标添加到您的路径中(如果它不在/etc/ld.so.conf中指定的路径中,那么可能将库目录添加到LD_LIBRARY_PATH中,正如在make install步骤中有关安装库的消息中所提到的那样),并且所有内容都应该可以在这个新版本中启动并运行。
打开一个新的shell后,可能值得检查一下您是否正在使用这个安装的版本,使用:

`which gcc`

和/或

`which as`

..以及版本如您所期望的那样:

`gcc --version`

和/或

`as --version`

..以及(当然)测试安装的版本构建可执行文件,在您将其释放到代码库之前,使用一些简单的示例:)
编辑:下面的评论包含了一些已知可以一起工作的版本。不是所有的组合都有效,所以你可能需要通过一些试验和错误来获得不同的组合!
后来编辑:gdb也可以包含在这个版本中(同样需要兼容的组件版本-请参阅注解)。以类似的方式,使用for f in ../gdb-8.1.1/* ; do ln -s "${f}" ; done将其作为binutils之后的最后一项添加,构建将自动拾取它。
编辑至2023-05-03:最新发布的版本gcc 13.1.0,binutils 2.40,gdb 13.1,cloog 0.18.1,isl 0.24,gmp 6.1.0,mpc 1.2.1,mpfr 4.1.0全部构建在一起都很好,至少为c,c++,fortran作为语言集。

6xfqseft

6xfqseft2#

您要做的是“组合树”或“树内binutils”构建。您可以找到有关如何处理herethere的文档。

相关问题