删除使用__attribute __((section))创建的部分

时间:2018-12-23 12:11:27

标签: c elf objcopy

我有许多功能和相应的单元测试。我想将测试嵌入到代码库本身中。我想出了以下解决方案:

void a() {
  // this code should be tested
}

__attribute__((section(".tests")))
void a_test() {
  // test if a() works
}

测试放在.tests节中,我可以剥离该节以进行发行版本。我尝试了以下方法:

$ gcc -c a.c -o a.orig.o # a.c is shown above
$ objcopy -R.tests a.orig.o a.o
objcopy: a.o: symbol `.tests' required but not present
objcopy:a.o: no symbols

我发现this question描述了一个类似的问题,答案是因为该节是从某个地方交叉引用的。

我认为.eh_frame是有罪的部分,因为将其删除会 工作:

$ objcopy -R.tests -R.eh_frame a.orig.o a.o
  • 我可以删除此部分而不会产生任何后果吗?
  • 有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

丢弃链接描述文件中的部分。