改变我的工具链架构(在 gentoo 中)

Tom*_*ter 5 gentoo gcc toolchain cross-compilation

这在某种程度上是 gentoo 特定的,所以我将在那个上下文中解释它,然后尝试将它抽象为一个通用的 linux 机器。

当我的机器是Athlon64时,我一开始不小心将我的CHOST设置为“i686-pc-linux-gnu”,没有注意。我想将其更改为“x86_64-pc-linux-gnu”。 有一个指南。 它不起作用。

第一步是“重新编译binutils,然后重新编译gcc”

这是说明的问题:

  1. 使用 gcc 编译 binutils - 这会成功生成新的 as、ar 等文件
  2. 打破了gcc。gcc 现在正在尝试使用新的 /usr/bin/as - 但它不能与它们一起使用
  3. 因为gcc什么都编译不了,所以我也编译不了gcc。我必须恢复为,ar 等;然后恢复 CHOST 更改,并重新编译 binutils。

所以我尝试了以下方法:

  1. 备份为、ar 等
  2. 编译 binutils,使 gcc 无法运行
  3. 将 ar、as 等链接到我备份的旧版本
  4. 尝试编译 gcc

gcc 编译失败:

/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/x86_64-pc-linux-gnu/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

是一个 glibc 错误(完成链)。

所以它看起来:

  1. 为了让 gcc 编译它依赖于新版本的 glibc
  2. 要运行 gcc,binutils 必须是旧版本

没有尝试过的步骤,因为它太复杂了我想先征求意见,是:

  1. 在新架构下编译 binutils,
  2. 将 as、ar 等重新链接到旧的可执行文件
  3. 用 old-gcc 和 old-binutils 编译新的 glibc
  4. 用 old-gcc 和 old-binutils 但 new-glibc 编译 new-gcc
  5. 将 as、ars 等重新链接到 new-binutils
  6. 像老板一样重新编译一切

上面的#4 是否有可能工作?我是否有希望在不完全重新安装的情况下完成此操作?