我分析了Simplicity Studio(Silicon Labs的Eclipse IDE变体,用于其微控制器)生成的项目。
我使用了基于arm-none-eabi-gcc工具链的ASM/C/C项目的默认设置。
对于G-Linker-Flags,他们做了一些在我看来非常奇怪的事情:他们打算链接到newlib-nano(标准库的小版本)。
然而,通常你需要决定你是否打算使用重定向,从而链接到nosys.specs,这也会使你的二进制文件更大,或者最小的一个是nano. specs。
然而,他们确实列出了两个选项,这对我来说没有意义。因此,我检查了另一个项目设置(这是在一个CM 3从STM32),他们显然做了同样的事情。这是为什么呢?
如果我不打算使用重定向(比如文件系统,printf/_write等),我需要列出nosys.specs吗?
补充问题:这些标志的顺序是否重要,或者这只是您要添加的所有选项的列表?
-g3 -gdwarf-2 -mcpu=cortex-m3 -mthumb -T "${BuildArtifactFileBaseName}.ld" --specs=nosys.specs -Xlinker --gc-sections -Xlinker -Map="${BuildArtifactFileBaseName}.map" --specs=nano.specs
1条答案
按热度按时间klh5stk11#
然而,他们确实列出了两个选项,这对我来说没有意义。
很有道理。如果没有
nosys
,你需要提供大量函数的定义,或者使用另一个库,例如semihostig。简单示例:(main.c是hello world程序)
正如你所看到的,没有nosys,它不会链接。