一起编制binutils和gcc的配方?

bdb*_*dog 23 gcc bootstrapping binutils

根据gcc构建说明,您可以与构建gcc(以及gmp,mpc等)同时构建binutils.

这是该页面所说的内容:

如果您还打算构建binutils(升级现有安装或用于代替OS的相应工具),请将binutils发行版解压缩到同一目录或单独的目录中.在后一种情况下,添加符号链接到您打算与编译器(bfd,binutils,gas,gprof,ld,opcodes,...)一起构建的binutils的任何组件到包含GCC源的目录.

同样,GMP,MPFR和MPC库可以与GCC一起自动构建.将GMP,MPFR和/或MPC源代码发行版解压缩到包含GCC源的目录中,并将其目录重命名为gmp,mpfr和mpc(或使用具有相同名称的符号链接).

这适用于gmp,mpc,mpfr,但我似乎无法建立所有binutils.我也无法弄清楚如何从binutils构建新的黄金链接器.有问题的版本是gcc-4.4.2和binutils-2.20.

一步一步的指导会很棒(对我来说,也适用于遇到这个问题的其他人).

Dav*_*ner 26

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

事实上,我刚刚使用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)
    
    Run Code Online (Sandbox Code Playgroud)
  • cd gcc-4.6.0 和符号链接gmp,mpc和mpfr目录,但没有链接中的版本号,例如:

    ln -s ../gmp-5.0.2 gmp
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在符号链接来自gu目录中不存在的binutils目录中的所有内容,因此任何已存在的内容都将优先,但binutils工具看起来对于构建是可见的:

    for file in ../binutils-2.21/* ; do ln -s "${file}" ; done
    
    Run Code Online (Sandbox Code Playgroud)
  • 更改一个目录并创建一个构建目录,将所有这些内容单独构建到源代码中(这通常用作推荐的方法,并且它仍然比在源代码内部构建更可靠):

    cd .. ; mkdir build
    
    Run Code Online (Sandbox Code Playgroud)
  • 此时,您应该有一组目录和链接,如下所示:

    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/
    
    Run Code Online (Sandbox Code Playgroud)
  • 从此目录配置整批,使用您需要传递的任何选项进行配置:

    ../gcc-4.6.0/configure --prefix=/foo/bar --enable-languages=c,c++,ada
    
    Run Code Online (Sandbox Code Playgroud)
  • 构建,等待,安装(你可能想在make -j4这里使用或者这样做以获得并行的一些构建,因为它需要一段时间):

    make -j4 ; make install
    
    Run Code Online (Sandbox Code Playgroud)

将目标添加到您的路径(如果它还没有)(如果这不是指定的那个,则可能是lib目录/etc/ld.so.conf,如make install步骤中安装库的消息中所述),并且所有内容都应该启动并运行版.

一旦你打开一个新的shell,你可能需要检查一下你是否正在使用这个已安装的版本:

    `which gcc`
Run Code Online (Sandbox Code Playgroud)

    `which as`
Run Code Online (Sandbox Code Playgroud)

..以及该版本与您期望的一样:

    `gcc --version`
Run Code Online (Sandbox Code Playgroud)

    `as --version`
Run Code Online (Sandbox Code Playgroud)

..以及(当然)测试已安装的版本使用一些简单的示例构建可执行文件,然后再放宽代码库:)

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

很久以后编辑:gdb也可以包含在这个版本中(再次需要兼容的组件版本 - 请参阅注释).以类似的方式将此作为binutils之后的最后一件事添加,使用for f in ../gdb-8.1.1/* ; do ln -s "${f}" ; done并且构建将自动获取它.

  • 给自己和其他人的一个注意事项:使用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) (2认同)
  • 另一个注意事项:使用gcc 4.7.2执行此操作,使用binutils-2.22和contrib/download_prerequisites for gmp,mpc,mpfr; 配方工作,但gcc无法使用-flto构建,导致:collect2:致命错误:找不到'ld'.为了纠正这个问题,在你的...前缀/ bin目录中创建一个符号链接ld - > ld-new. (2认同)
  • gcc 4.9 build使用:binutils 2.24,cloog 0.18.1,gmp 5.1.3 isl 0.12.2 mpc 1.0.2 mpfr 3.1.2.由于宏警告,使用"--disable-werror"选项可以避免在从binutils构建bfd版本时出现警告.(这些警告在当前开发版本中从他们的git repo中修复) (2认同)

F'x*_*F'x 6

您想要做的称为“组合树”或“树内 binutils”构建。您可以在这里那里找到有关如何继续操作的文档。