我在使用嵌入式arm gcc编译器的链接器时遇到了问题,我在网上的某个地方找到了一个教程,上面说我可以通过包含参数-specs=nosys.specs来修复arm-none-eabi-gcc中的链接器错误,这对我很有效,并且它能够编译我的代码。
我的芯片是一个ATSAM7SE256微控制器,据我所知,它是一个使用armv4t和thumb指令集的arm7tdmi处理器,我一直在使用以下命令编译我的代码:
arm-none-eabi-gcc -march=armv4t -mtune=arm7tdmi -specs=nosys.specs -o <exe_name>.elf <input_files>代码编译时没有任何问题,但我不知道它是否在做我认为它正在做的事情。
等级库文件的意义是什么?您还可以使用-specs=设置哪些其他值,以及在哪些情况下您希望这样做?nosys.specs是我想要的完全嵌入式ARM微控制器的值吗?
发布于 2021-06-12 01:42:34
文档记录在:https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Overall-Options.html#Overall-Options
它是一个包含开关的文件,用于覆盖编译器、汇编器和链接器等各种构建组件的标准默认值。例如,它可以用来替换默认的C库。
我从未见过它被使用;通常,裸机嵌入式系统构建显式地指定--nostdlib,然后显式地链接所需的库。它可以用于特定于环境的构建环境,以链接其他默认代码,例如RTOS。就我个人而言,我更愿意在命令行中显式地将其隐藏在某个文件中。
本质上,它应用文件中指定的开关,就好像它们是默认值一样,因此可以用来为特定的构建和执行环境定义默认值。
specs文件的格式记录在https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Spec-Files.html#Spec-Files上
在这种情况下,如果不能同时看到链接器错误和nosys.specs文件的内容,就很难说出它是如何或为什么解决链接器问题的。当然,另一种解决方案是直接应用specs文件中的任何开关。
https://stackoverflow.com/questions/67940155
复制相似问题