0

我在使用嵌入式 arm gcc 编译器的链接器时遇到了问题,我在网上某处找到了一个教程,说我可以arm-none-eabi-gcc通过包含对我有用的参数来修复链接器错误-specs=nosys.specs,并且它能够编译我的代码。

我的芯片是一个 ATSAM7SE256 微控制器,据我了解,它是一个使用and指令集的arm7tdmi处理器,我一直在使用以下代码编译我的代码:armv4tthumb

arm-none-eabi-gcc -march=armv4t -mtune=arm7tdmi -specs=nosys.specs -o <exe_name>.elf <input_files>

并且代码编译没有问题,但我不知道它是否正在做我认为它正在做的事情。

规范文件的意义是什么?您可以使用 设置哪些其他值-specs=,以及在什么情况下您想要设置?nosys.specs我想要一个完全嵌入式的 arm 微控制器的价值吗?

4

1 回答 1

0

它记录在:https ://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Overall-Options.html#Overall-Options

它是一个文件,其中包含用于覆盖各种构建组件(例如编译器、汇编器和链接器)的标准默认值的开关。例如,它可以用来替换默认的 C 库。

我从未见过它使用过;通常裸机嵌入式系统构建显式指定--nostdlib然后显式链接所需的库。它可以用于特定于环境的构建环境,以链接其他默认代码,例如我猜的 RTOS。就个人而言,我宁愿在命令行上将所有这些都明确地隐藏在某个文件中。

本质上,它将文件中指定的开关应用为默认值,因此可用于定义特定构建和执行环境的默认值。

规格文件的格式记录在https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Spec-Files.html#Spec-Files

在这种情况下,如果没有看到链接器错误和nosys.specs文件内容,就很难说它如何或为什么解决了您的链接器问题。当然,另一种解决方案是直接应用规范文件中的任何开关。

于 2021-06-11T17:42:33.813 回答