GNU C 编译器将错误的体系结构名称传递给链接器。例如gcc helloworld.i
抛出错误ld: unknown/unsupported architecture name: -arch arm
。经过对 LD 的一些实验后,这似乎armv7
是我应该使用的架构。编译和组装操作似乎工作正常。
看来编译器集合(iphone-gcc)旨在与通过开源 Darwin CC 工具提供的旧版本链接器一起使用,而不是我在 CC 工具集合之外作为独立安装提供的较新的 LD64 。有没有办法告诉 GCC 将另一个架构传递给链接器?将-Wl,-arch,armv7
or传递-Xlinker -arch -Xlinker armv7
给 GCC 会产生相同的错误。
答案1
您不应该零碎地升级您的工具链。这些部分必须协同工作。 GNU 工具允许如此多的变化,因此必须将各个部分设置为协同工作,特别是对于交叉编译器。
如果您出于某种原因需要更新的版本ld
,您应该构建一个完整的工具链来支持它。
答案2
采纳@Warren Young 的建议并升级工具链的其余部分,而不是仅升级链接器。
对于 ARM 上的 Darwin 9 及更高版本,CoolStar 的工具链建议从 BigBoss 存储库获取。该工具链包含 LLVM+Clang 作为过时的 iphone-gcc 的替代品,以及 LD64 和较新的 Darwin CC Tools。看iPhone 开发维基(有点过时)有关 iphone-gcc 和 LLVM+Clang 之间更详细的比较。
答案3
如果您使用 EasyBuild 工具,您可以自动交付多个工具链:
https://hpc.uni.lu/users/software/#sw-toolchain
FI。看看 ClangGCC
现在,GCC 拥有一个系统spec strings
指定它如何与其他程序一起工作并提供给其他程序:
http://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
您的任务是根据您的需要调整它们;完成后,请记录它和/或制作一个其他人可以依赖的 EasyBuild 工具链!