如在此答案中所述,GNU
objcopy
可用于从任意文件内容创建目标文件。该方法可用于将资源嵌入到程序中。但是,符号名称是由输入文件名生成的。
例如,如果您运行:
objcopy --input binary --output elf64-x86-64 --binary-architecture i386:x86-64 myfile.txt myfile.o
生成的目标文件将包含
_binary_myfile_txt_start
、_binary_myfile_txt_end
和 _binary_myfile_txt_size
,它只是用 _
替换非字母数字字符。
但是,当我处理不同目录中的文件
foo.bar
和foo_bar
,甚至多个foo.bar
时,符号将是相同的。那么有没有办法在输出目标文件中手动指定符号以避免冲突?
但是,当我处理文件 foo.bar 和 foo_bar,甚至不同目录下的多个 foo.bar 时,
您似乎极不可能从单个目录中嵌入 both
foo.bar
和 foo_bar
。如果这样做,您始终可以使用不同的名称创建副本(或符号链接),并嵌入 that。
多个目录似乎也不是真正的问题:如果您使用目录路径,名称最终为
_binary_relative_dir_foo_bar_start
或 _binary__absolute_dir_foo_bar_start
。
那么有没有办法在输出目标文件中手动指定符号以避免冲突?
不,名称被硬编码在
binutils/bfd/binary.c
这里。