【发布时间】:2017-07-17 01:49:20
【问题描述】:
我有 C 语言、gcc 工具链、elf32 格式的目标文件。
假设我有函数 a(),其中包括对函数 b() 的调用。如果它们在单个 .c 文件中,则生成的 .o 文件包含 .text.a 和 .text.b 部分,.rel.text.a 包含对符号“b”的引用,而符号表包含引用部分 .text.b 的符号“b” .
如果源中仅包含a(),则生成的目标文件仅包含.text.a 部分,.rel.text.a 包含对符号“b”的引用,而符号表包含符号“b”,但不引用任何符号(Ndx = UND)。在这种情况下,符号引用由链接器在以后的状态下解析。
我想要获取第二个目标文件(没有.text.b 部分,只包含.text.a 和不引用任何内容的符号“b”)没有从源中删除函数b()定义。
(背景:我有包含几个函数的源文件,我无法编辑源文件,我需要将它们分开为单独的目标文件,然后再将它们链接在一起。)
objcopy -j .text.a file.o test.o、objcopy -R .text.b file.o test.o、objcopy --add-symbol b=0 -j .text.a file.o test.o 等命令以以下错误结束:
objcopy: build/test.o: symbol `b' required but not present
objcopy:build/test.o: No symbols
我不知道如何取消定义或外化符号。
【问题讨论】:
标签: c gcc elf binutils object-files