作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习使用 GCC 工具链编写 ARM 代码。我遇到了一些找不到文档的 GCC 选项。有人可以帮忙解释一下他们是做什么的吗?
-specs=nosys.specs
-specs=nano.specs
-specs=rdimon.specs
-lnosys
-specs=nosys.specs
和
-lnosys
涉及?你是一起使用它们,还是它们相互排斥,或者其他什么?
-lm
一起使用和
-lc
.这是否只是为您提供标准的 libc 和 libm 函数?
rdimon
代表?我知道它是用于“半主机”,这意味着以某种方式使用主机 IO。这是否意味着我可以打印到主机控制台?我找不到有关如何实际使用它的文档。
最佳答案
Gcc 使用规范字符串,它控制要运行的子进程以及它应该传递给它们的参数。规范字符串定义的行为可以使用规范文件覆盖,其目的和语法记录在此处:https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
查看 gcc 工具链的 lib 文件夹中的这些规范文件(例如 /usr/lib/arm-none-eabi/lib
),我们可以看到上述规范文件定义了链接器将使用哪个标准库。
例如,nosys.specs
只是定义系统调用应该实现为调用时返回错误的 stub ( -lnosys
)。在这种情况下,libc 的选择取决于是否应该使用 nano。与 %G
处理 libgcc 规范字符串,它定义传递给链接器的参数。
nosys.specs:
%rename link_gcc_c_sequence nosys_link_gcc_c_sequence
*nosys_libgloss:
-lnosys
*nosys_libc:
%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
*link_gcc_c_sequence:
%(nosys_link_gcc_c_sequence) --start-group %G %(nosys_libc) %(nosys_libgloss) --end-group
nano.specs
定义系统包含路径和库参数以使用 newlib-nano。规范文件包含
-lc
的替代品和其他纳米等价物,例如
-lc_nano
.因此,将它与这些结合使用将使 gcc 仍然将 nano 库传递给链接器。
rdimon.specs
,
-lrdimon
作为标准库的 libgloss 部分传递。这基本上意味着您可以使用系统调用(以及 printf),但这依赖于附加的调试器,如果没有调试器,CPU 可能会崩溃。
关于gcc - 使用 ARM GCC 时 "nosys"、 "nano"、 "rdimon"术语是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65453293/
我正在学习使用 GCC 工具链编写 ARM 代码。我遇到了一些找不到文档的 GCC 选项。有人可以帮忙解释一下他们是做什么的吗? -specs=nosys.specs -specs=nano.spec
我是一名优秀的程序员,十分优秀!