我已经成功构建了几个跨 gcc 编译器,它们托管在 OSX Lion 上,并针对 i386-pc-solaris2.10 和 x86_64-linux-gnu。对于那些安装在我的路径中的 $BINUTILSROOT 和 $BINUTILSROOT/bin 下的目标,我有 2.22 binutils。阅读http://gcc.gnu.org/install/configure.html,特别是
--with-as=pathname 指定编译器应该使用pathname指向的汇编器,而不是通过标准规则找到的那个来寻找汇编器,它们是:
- 除非使用交叉编译器构建 GCC,否则请检查 libexec/gcc/target/version 目录。libexec 默认为 exec-prefix/libexec;exec-prefix 默认为前缀,默认为 /usr/local,除非被上述 --prefix=pathname 开关覆盖。target 是目标系统三元组,例如 `sparc-sun-solaris2.7',version 表示 GCC 版本,例如 3.0。
- 如果目标系统与您构建的目标系统相同,请检查操作系统特定的目录(例如 Sun Solaris 2 上的 /usr/ccs/bin)。
- 在 PATH 中检查名称以目标系统三元组为前缀的工具。
- 如果主机和目标系统三元组相同(换句话说,如果主机工具也可用于目标,我们将使用主机工具)。
我以为我的 -gcc (配置了--with-gnu-as --with-gnu-ld)会分别拾取 i386-pc-solaris2.10-as 和 x86_64-linux-gnu-as (以及相应的 -ld ) 因为它们位于 PATH 中的 $BINUTILSROOT/bin 中,因此上面列表中的第三个项目符号应该适用。但这似乎不起作用,我已经用 dtrace 确认 -gcc 不会在 PATH 中搜索 -as 和 -ld。我发现唯一可行的解决方案是同时完全指定 as 和 ld 添加
--with-as=$BINUTILSROOT/bin/-as --with-ld=$BINUTILSROOT/bin/-ld
配置 gcc 时。
我是否误解了 gcc 文档,或者这是使交叉编译工作的唯一方法?