Gcc 编译binutils&;我们在一起吗?

Gcc 编译binutils&;我们在一起吗?,gcc,bootstrapping,binutils,Gcc,Bootstrapping,Binutils,根据需要,您可以在构建gcc(以及gmp、mpc等)的同时构建binutils 下面是该页面的内容: 如果您还打算构建binutils (或升级现有的 安装或用于代替 操作系统的相应工具), 打开binutils分发包 在同一目录或 分开一个。在后一种情况下,添加 指向的任何组件的符号链接 您打算构建的binutils 与编译器(bfd、binutils、, 气体、gprof、ld、操作码……)至 包含GCC源代码的目录 同样,GMP、MPFR和MPC 库可以自动构建 与GCC一起。打开GMP的

根据需要,您可以在构建gcc(以及gmp、mpc等)的同时构建binutils

下面是该页面的内容:

如果您还打算构建binutils (或升级现有的 安装或用于代替 操作系统的相应工具), 打开binutils分发包 在同一目录或 分开一个。在后一种情况下,添加 指向的任何组件的符号链接 您打算构建的binutils 与编译器(bfd、binutils、, 气体、gprof、ld、操作码……)至 包含GCC源代码的目录

同样,GMP、MPFR和MPC 库可以自动构建 与GCC一起。打开GMP的包装, MPFR和/或MPC源分布 在包含GCC的目录中 源并重命名其目录 分别符合gmp、mpfr和mpc(或 使用具有相同属性的符号链接 姓名)

这对gmp、mpc、mpfr都很好,但我似乎无法让它构建所有的Binutil。 我也不知道如何让它从binutils构建新的黄金链接器。 所讨论的版本是gcc-4.4.2和binutils-2.20


一个循序渐进的指导会很好(对我来说,也对其他遇到这个问题的人来说)。

我总是单独构建所有内容。构建并安装完binutils后,只要为每个配置脚本提供相同的
--target
--prefix
选项,gcc的构建就应该很好:

比努蒂尔斯:

$ ./configure --target=XYZ --prefix=/abc/def
$ make all install
然后添加路径(如有必要):

并构建gcc:

$ ./configure --target=XYZ --prefix=/abc/def
$ make all-gcc install-gcc

然后根据需要构建您的libc和gcc的其余部分(也可能是调试器!)。

您要做的是称为“组合树”或“树内binutils”构建。您可以找到关于如何继续和的文档。

这仍然应该得到支持,因为它通常用于构建交叉编译器

事实上,我刚刚用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
    ... (unpack others here, watch file lists scroll past)
    
  • cd gcc-4.6.0
    和符号链接gmp、mpc和mpfr目录,但链接中没有其版本号,例如:

    ln -s ../gmp-5.0.2 gmp
    
  • 现在,符号链接从binutils dir到gcc dir中不存在的所有内容,因此任何已经存在的内容都将优先考虑,但binutils工具将对构建可见:

    for file in ../binutils-2.21/* ; do ln -s "${file}" ; done
    
  • 更改一个目录并创建一个构建目录,以便将所有这些内容分别构建到源中(这一直是推荐的方法,而且它往往比在源目录中构建更可靠):

  • 此时,您应该有一组目录和链接,如下所示:

    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
       ... (lots more symlinks for binutils here, plus existing gcc stuff)
    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
    或其他方法来并行构建一些构建,因为这需要一段时间):

如果还没有,请将目标添加到路径中(如果这超出了
/etc/LD.so.conf
中指定的路径,则可能添加到LD_LIBRARY_路径的lib dir,如
make install
步骤中有关安装库的消息中所述),并且所有内容都应该在新版本中启动并运行

在打开新的shell后,可能需要检查您是否正在使用此已安装版本,包括:

    `which gcc`

…以及版本与您预期的一致:

    `gcc --version`

…以及(当然)在您将安装的版本发布到您的代码库之前,使用一些简单的示例测试安装的版本是否可以构建可执行文件:)

编辑:下面的注释包含一些已知可以协同工作的版本集。并不是所有的组合都有效,所以您可能需要对所提到的不同组合进行一些尝试和错误

更晚的编辑:gdb也可以包含在此构建中(同样需要兼容的组件版本-请参阅注释)。
以类似的方式将其作为binutils之后的最后一项添加,在../gdb-8.1.1/*中使用f的
;do ln-s“${f}”;完成
,构建将自动拾取它。

谢谢,但这不是我要问的问题。我知道如何分别构建它们。这些文档表明您可以将它们作为单个构建进行构建。这就是我要找的。为什么要麻烦呢?如果你可以单独完成这些任务,并且它们都能工作,那么为什么要经历将它们放在一起的痛苦呢?他没有问这个策略的忠实性,只是问如何做到。我和其他人需要注意的是:使用gcc 4.7.1进行此操作需要比当前最新版本更旧的mpfr版本。我成功地使用了mpfr-2.4.2,但是任何>3.0的东西都不适合我。(所有组件列表:binutils-2.22、gcc-4.7.1、gmp-5.0.5、mpc-1.0、mpfr-2.4.2)另一个注意事项:使用gcc 4.7.2、binutils-2.22和gmp、mpc、mpfr的参与/下载前提条件;配方有效,但gcc无法使用-flto构建,导致:collect2:致命错误:找不到“ld”。要纠正这一点,请在您的…prefix/bin目录中创建一个符号链接ld->ld new。如果您想启用“graphite”优化(请参阅),那么您还需要ISL和CLooG库,并以与其他库(mpfr、mpc等)相同的方式对它们进行符号链接。我将很快更新说明,以包括这一点。gcc 4.9构建工作包括:binutils 2.24、cloog 0.18.1、gmp 5.1.3 isl 0.12.2 mpc 1.0.2 mpfr 3.1.2。从binut生成bfd版本时,使用“-disable werror”选项避免警告
make -j4 ; make install
    `which gcc`
    `which as`
    `gcc --version`
    `as --version`