在编译和链接--gc-sections时,使用avr-gcc并尝试使用-ffunction-sections和-fdata-sections来减小二进制文件的大小..lds文件不包含任何内容:
部分{}
将许多.o部分链接到.a时会发生此错误,稍后将使用它来完成构建.
我已经阅读了其他一些讨论这些选项的帖子,但没有任何内容可以澄清ENTRY()问题.在尝试减少代码大小之前,它们在部分阶段似乎不需要它(预先存在的链接器脚本显然不使用它).
文档说明: - gc-sectionts
"在执行部分链接时可以设置此选项(使用选项'-r'启用).在这种情况下,必须通过'--entry'或`--undefined'选项或通过链接描述文件中的ENTRY命令."
这就是我失去的地方.非常感谢有关如何在链接描述文件中使用--undefined,--entry或ENTRY cmd来解决此问题的更多解释.
使用AVR-GCC,AVR-LD
我试图通过使用fdata-sections -ffunction-sections和gc-sections来严重减小输出文件的大小。当不使用这些选项进行编译时,我的输出为〜63KB,而使用这些选项则为〜30KB,因此看起来很棒。
不幸的是,在加载和测试输出后,我注意到它无法正常工作。垃圾回收似乎已远远超过了我的预期,并且检查.map时发现有些关键数据不存在。
关于什么原因在链接时会导致这些数据/功能被丢弃?(我意识到这可能是一个我希望提供的细节太少的问题,如果需要任何信息,请询问,我会尽力提供)
有没有办法追踪“未使用”时垃圾回收扔掉了哪些符号?
如果不使用-fdata-sections -ffunction-sections -gc-sections,是否可以跟踪符号依赖关系?(要验证gc-sections仅收集了应该收集的内容)-我注意到这是一个选择,但是使用Verax建议的方法对我来说非常痛苦
编辑:编译器和链接器行
avr-ld -mavrxmega6 -gc-sections -T 链接描述 文件 libgcc.a -o firmware.elf
avr-gcc -Wall -Wstrict原型-g -ffunction-sections -fdata-sections -Os -mmcu = atxmega256a3 -fno-jump-tables -std = gnu99 -fpack-struct -fno-common -mcall-prologues -c- o file.o file.c
我正在尝试将硬编码的配置选项clang-tidy从我们的 Makefile 移动到.clang-tidyYAML 文件。截至目前,我们将 run-clang-tidy-6.0.py 称为:
# Run clang-tidy. The header filter includes files in the foo and bar/baz directories
# but it excludes files ending in .g.h (auto-generated headers).
run-clang-tidy-6.0.py -header-filter='.*(foo|bar\/baz).*(?<!\.g\.h)$$' > clang-tidy-output.txt
Run Code Online (Sandbox Code Playgroud)
这工作正常。但是如果我有HeaderFilterRegex: '.*(foo|bar\/baz).*(?<!\.g\.h)$$'in .clang-tidy,过滤就不会按预期工作。
我尝试了围绕哪些字符被转义/未转义的各种事情,因为我知道 Make 和 YAML 有不同的期望,但我无法做到恰到好处。IE:
非常感激!