【问题标题】:What does the -specs argument do in arm-none-eabi-gcc?arm-none-eabi-gcc 中的 -specs 参数有什么作用?
【发布时间】:2021-08-28 13:59:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 知道什么是链接器错误会很有用,这样其他人就可以知道什么时候解决方案是合适的。指向“某处教程”的链接也会使这一点变得不那么模糊。

标签: embedded arm-none-eabi-gcc


【解决方案1】:

记录在: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 文件中的任何开关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多