相关疑难解决方法(0)

objcopy将目录路径名添加到符号名称之前

我想用来objcopy将二进制形式的文本文件包含到可执行文件中.(在运行时我需要将文件作为字符串).这工作正常,直到链接器需要从符号名称中查找引用.问题是objcopy在符号名称前加上文件的路径名.由于我使用GNU Autotools发送包,这个前置路径名发生了变化,我不知道在C/C++程序中使用什么外部链接器符号.

nm libtest.a |grep textfile
textfile.o:
00001d21 D _binary__home_git_textfile_end
00001d21 A _binary__home_git_textfile_size
00000000 D _binary__home_git_textfile_start
Run Code Online (Sandbox Code Playgroud)

libtest.a 是用(从Makefile.am中提取)生成的:

SUFFIXES = .txt
.txt.$(OBJEXT):
    objcopy --input binary --output elf32-i386 --binary-architecture i386 $< $@
Run Code Online (Sandbox Code Playgroud)

我怎样才能告诉objcopy我们文件名的词干作为链接符号?或者还有另一种解决问题的方法吗?

c c++ objcopy

10
推荐指数
4
解决办法
4937
查看次数

在链接时插入字符串

我想定义const char*程序使用的外部全局符号 ( )。在链接时添加具有给定值的符号。这对于例如提交哈希或构建时间很有用。

我发现--defsym它做了别的事情。Go 链接器通过-X选项支持此功能。(是的,我知道,Go 字符串是管理的,但我说的是普通的零终止 c 字符串)

例如:

extern const char *git_commit;

int main(int argc, char *argv[]) {
    puts(git_commit);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc main.o -Wl<something here that adds git_commit and set it to '84e5...'>
Run Code Online (Sandbox Code Playgroud)

我知道包含这些 stringconfig.h方法和构建目标文件。但它的 2019 年知道。如此简单的任务应该很容易。

编辑更精确的问题 Go Linker 的-X选项在 gcc/binutils 中是否有等效选项。

c c++ linker

0
推荐指数
1
解决办法
353
查看次数

标签 统计

c ×2

c++ ×2

linker ×1

objcopy ×1