最近,我尝试为arm平台创建自己的交叉编译工具链。我注意到,在GCC的autoconf脚本中,我必须传递以下变量:
--with-cpu=cortex-m4 \
--with-fpu=fpv4-sp-d16 \
--with-float=hard \
--with-mode=thumb \因此,似乎不同的ARM平台应该有不同的工具链/编译器,因为我必须配置cpu、fpu等,但是我发现这些工具链有一些预先制作的二进制文件。
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
我尝试了这个工具链,并编写了一个hello world程序,并在我的目标手臂板上试了一下,然后它显示了“分段错误”。好的,至少它不是“无法执行二进制文件: Exec格式错误”
但我仍然在想,为什么它不起作用?还是应该真的起作用?
发布于 2017-10-23 16:37:26
在构建工具链本身时,必须配置要支持的特性。您可以构建一个“苗条”编译器,只支持您想要的目标所需的特性。
但是,您也可以支持ARM平台提供的一切,并获得一个笨拙的编译器。
对于特性本身,您应该在不同类型之间有所不同:
-mcpu这样的优化标志,它们只是对某个ARM处理器的代码进行优化fpu功能必须可以使用fpu。float=hard依赖于操作系统,而不是处理器:它允许将浮点数传递给浮动寄存器中的函数,这可能是一个很大的加速,因为ARM寄存器和浮动寄存器之间的传输很慢。但就联系而言,该系统需要就这一点达成一致。https://unix.stackexchange.com/questions/399907
复制相似问题