如何使用GNU ARM工具链生成与位置无关的代码?

时间:2012-06-05 08:06:20

标签: gcc arm cross-compiling gcc4

我正在为我的项目使用ARM ELF工具链。我正在开发一个需要独立于位置的引导加载程序,因为它会在重置时将其自身从flash重定位到ram。我已经尽力弄清楚如何使用GNU ARM工具链编译与位置无关的代码,但似乎无法使其工作。

我已经尝试为编译器使用-fpic和-fpie选项,并为链接器使用-pie但是当我使用这些选项时,编译器会抱怨没有为.got或.plt部分定义任何部分。我不确定这些部分应该去哪里,即BSS或TEXT。在谷歌搜索之后,我想我应该只使用-fpie,但我不确定。

有经验的人可以帮助我。我正在使用GNU ARM 4.1.1

1 个答案:

答案 0 :(得分:0)

您可以通过向-mapcs-reentrant提供arm-linux-gnueabi-gcc选项并向其他汇编程序提供-Wa,-K选项来生成位置无关代码[PIC]。 喜欢:

arm-linux-gnueabi-gcc <other option> -mapcs-reentrant -Wa, -K <other option> files..