小编Bra*_*fer的帖子

avr-ld错误:"gc-sections需要一个条目或一个未定义的符号"

在编译和链接--gc-sections时,使用avr-gcc并尝试使用-ffunction-sections和-fdata-sections来减小二进制文件的大小..lds文件不包含任何内容:

部分{}

将许多.o部分链接到.a时会发生此错误,稍后将使用它来完成构建.

我已经阅读了其他一些讨论这些选项的帖子,但没有任何内容可以澄清ENTRY()问题.在尝试减少代码大小之前,它们在部分阶段似乎不需要它(预先存在的链接器脚本显然不使用它).

文档说明: - gc-sectionts

"在执行部分链接时可以设置此选项(使用选项'-r'启用).在这种情况下,必须通过'--entry'或`--undefined'选项或通过链接描述文件中的ENTRY命令."

这就是我失去的地方.非常感谢有关如何在链接描述文件中使用--undefined,--entry或ENTRY cmd来解决此问题的更多解释.

c avr gnu ld

5
推荐指数
1
解决办法
652
查看次数

-gc-sections丢弃使用的数据

使用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

c garbage-collection avr-gcc

5
推荐指数
1
解决办法
4720
查看次数

Clang-tidy header-filter 正则表达式:Makefile -> .clang-tidy

我正在尝试将硬编码的配置选项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:

  • 替换 $$ -> $
  • 双重转义 \ ( \ -> \\)
  • 删除 '\' 有人可以向我解释这个正则表达式在 YAML 文件中的适当格式吗?

非常感激!

regex yaml makefile clang-tidy

5
推荐指数
1
解决办法
2959
查看次数

标签 统计

c ×2

avr ×1

avr-gcc ×1

clang-tidy ×1

garbage-collection ×1

gnu ×1

ld ×1

makefile ×1

regex ×1

yaml ×1