Art*_*bin 15 c gcc cross-compiling
最近我一直在使用GCC进行交叉编译,并发现了一个看似复杂的区域,即工具链.
我不太明白这一点,因为我认为GCC可以为大多数常见架构创建二进制机器代码,而其他真正重要的是你链接的库和创建的可执行类型.
海湾合作委员会不能自己做所有这些事吗?通过单一构建的GCC,所有适当的库和发送到GCC的正确标志,我可以为Windows x86机器生成PE可执行文件,然后为嵌入式Linux MIPS设备创建ELF可执行文件,最后为OSX PowerPC创建可执行文件机?如果没有,有人可以解释你将如何实现这一目标?
Nic*_*yer 12
通过单一构建的GCC,所有适当的库和发送到GCC的正确标志,我可以为Windows x86机器生成PE可执行文件,然后为嵌入式Linux MIPS设备创建ELF可执行文件,最后为OSX PowerPC创建可执行文件机?如果没有,有人可以解释你将如何实现这一目标?
没有.GCC的单个版本为一个目标架构生成目标代码.您需要针对Intel x86的构建,针对MIPS的构建以及针对PowerPC的构建.但是,尽管您可以通过单次调用GCC将源代码构建到可执行文件中,但编译器并不是您需要的唯一工具.在引擎盖下,它也使用了assembler(as)和linker(ld),并且需要为目标体系结构和平台构建那些.通常GCC使用GNU binutils包中的这些工具的版本,因此您也需要为目标平台构建它们.
您可以在此处阅读有关构建交叉编译工具链的更多信息.
我不太明白这一点,因为我的印象是GCC可以为大多数常见架构创建二进制机器代码
这是正确的,因为GCC的源代码本身可以构建到针对各种体系结构的编译器中,但是您仍然需要单独的构建.
关于-march,这不允许GCC的相同构建在平台之间切换.相反,它用于选择允许用于同一系列处理器的指令.例如,最早的x86处理器不支持现代x86处理器支持的一些指令,因为它们是稍后介绍的(例如MMX和SSE等扩展指令集).当您通过时-march,GCC将启用该处理器及其前身支持的所有操作码.引用GCC手册:
虽然选择特定的cpu类型将为该特定芯片安排适当的事情,但如果没有使用-march = cpu-type选项,编译器将不会生成任何不在i386上运行的代码.