为什么cross gcc会调用native as'?

时间:2011-08-05 21:05:43

标签: c macos gcc cross-compiling

我正在使用现有脚本为OSX构建ps2(playstation 2)工具链,该脚本过去在Linux / Windows上运行良好但在OSX上一直很麻烦。

我现在面临的问题是,我发现交叉gcc显然正在调用原生'as'而不是现有的'''作为':

  

ee-gcc -B / Users / gilligan / ps2toolchain / build / newlib-1.10.0 / build-ee / ee / newlib / -isystem /Users/gilligan/ps2toolchain/build/newlib-1.10.0/build- ee / ee / newlib / targ-include -isystem /Users/gilligan/ps2toolchain/build/newlib-1.10.0/newlib/libc/include -DPACKAGE = \“newlib \”-DVERSION = \“1.10.0 \” - 一世。 -I ../../../../../ newlib / libc / stdlib -O2 -DMALLOC_ALIGNMENT = 16 -DMISSING_SYSCALL_NAMES -I ../../ targ-include -I ../../。 ./../../newlib/libc/../libc/include -fno-builtin -G0 -g -c ../../../../../newlib/libc/stdlib/__adjust 。C   ee-gcc -B / Users / gilligan / ps2toolchain / build / newlib-1.10.0 / build-ee / ee / newlib / -isystem /Users/gilligan/ps2toolchain/build/newlib-1.10.0/build-ee/ee / newlib / targ-include -isystem /Users/gilligan/ps2toolchain/build/newlib-1.10.0/newlib/libc/include -DPACKAGE = \“newlib \”-DVERSION = \“1.10.0 \” - 我。 -I ../../../../../ newlib / libc / stdlib -O2 -DMALLOC_ALIGNMENT = 16 -DMISSING_SYSCALL_NAMES -I ../../ targ-include -I ../../。 ./../../newlib/libc/../libc/include -fno-builtin -G0 -g -c ../../../../../newlib/libc/stdlib/__exp10 。C   致命:/ usr / bin /../ libexec / gcc / darwin / x86_64 / as:我不明白'G'旗帜!   make [3]: * [__exp10.o]错误1   make [3]:* 等待未完成的工作....   致命:/ usr / bin /../ libexec / gcc / darwin / x86_64 / as:我不明白'G'旗帜!   make [3]: * [__adjust.o]错误1   make [2]: [all-recursive]错误1   make [1]: [all-recursive]错误1   make:* [all-target-newlib]错误2

这里需要注意的事情(抱歉不太可读)是 ee-gcc / usr / bin /../ libexec / gcc / darwin / x86_64调用'as' / as 即系统本机而不是ee-as。怎么会这样?

检查' ee-gcc -print-search-dirs '的输出我可以看到ee-as确实在其中一个指定的路径中,我检查它是可执行的。

如果没有访问所有数据,可能很难说出来,但也许有人知道我能找到什么 - 我不明白ee-gcc是如何将其汇编程序解析为本机的。汇编程序二进制选择如何工作?

更新 感谢您的投入,但我担心整件事情比最初的预期更加破碎。现在gcc(llvm-gcc-4.2)在处理libgcc2.c时是segfaulting

  

/Users/gilligan/Development/ps2dev/ps2toolchain/build/gcc-3.2.2/build-ee-stage1/gcc/xgcc -B / Users / gilligan / Development / ps2dev / ps2toolchain / build / gcc-3.2。 2 / build-ee-stage1 / gcc / -B / usr / local / ps2dev / ee // ee / bin / -B / usr / local / ps2dev / ee // ee / lib / -isystem / usr / local / ps2dev / ee // ee / include -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -G 0 -g -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -Dinhibit_libc -I。 -一世。 -I ../../ gcc -I ../../ gcc /。 -I ../../ gcc / config -I ../../ gcc /../ include -DL_muldi3 -c ../../gcc/libgcc2.c -o libgcc /./_ muldi3.o   在../../gcc/libgcc2.c:44中包含的文件中:   ../../gcc/libgcc2.h:242:内部错误:分段错误:11   请提交完整的错误报告,   如果合适,使用预处理的来源。   请参阅说明。   make [2]: * [libgcc /./_ muldi3.o]错误1   make [1]: [libgcc.a]错误2   make:* * [all-gcc]错误2

我开始谷歌搜索相关的错误报告/补丁,但到目前为止还没有骰子。猜猜我准备好了。再次感谢您的投入。

1 个答案:

答案 0 :(得分:1)

汇编程序路径解析是机器规范中的AFAIK

 gcc -dumpspecs

并查看*invoke_as:部分

您可以使用-specs=选项覆盖规范。