Gcc 编译binutils&;我们在一起吗?
根据需要,您可以在构建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.20Gcc 编译binutils&;我们在一起吗?,gcc,bootstrapping,binutils,Gcc,Bootstrapping,Binutils,根据需要,您可以在构建gcc(以及gmp、mpc等)的同时构建binutils 下面是该页面的内容: 如果您还打算构建binutils (或升级现有的 安装或用于代替 操作系统的相应工具), 打开binutils分发包 在同一目录或 分开一个。在后一种情况下,添加 指向的任何组件的符号链接 您打算构建的binutils 与编译器(bfd、binutils、, 气体、gprof、ld、操作码……)至 包含GCC源代码的目录 同样,GMP、MPFR和MPC 库可以自动构建 与GCC一起。打开GMP的
一个循序渐进的指导会很好(对我来说,也对其他遇到这个问题的人来说)。我总是单独构建所有内容。构建并安装完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)
和符号链接gmp、mpc和mpfr目录,但链接中没有其版本号,例如:cd gcc-4.6.0
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`