我需要在我的项目中包含一个二进制程序。我使用objcopy从二进制文件创建一个对象文件。对象文件可以在我的程序中链接。objcopy创建适当的符号来访问二进制数据。
示例
objcopy -I binary -O elf32-littlearm --binary-architecture arm D:\Src\data.jpg data.o生成的符号是:
_binary_D__Src_data_jpg_end
_binary_D__Src_data_jpg_size
_binary_D__Src_data_jpg_start问题是符号包括二进制文件D__Src_的路径。当从不同位置包含二进制文件时,这可能会有所帮助。但让我烦恼的是,当我从不同的位置获取文件时,符号会发生变化。由于这将在多个构建站上运行,因此不能使用--重新定义-sym选项来剥离路径。
如何摆脱符号名中的路径?
发布于 2017-05-31 15:12:09
我通过在objcopy中使用这个开关解决了这个问题:
-前缀-区段=abc
这提供了一种唯一标识二进制对象文件(例如)中数据的方法。二进制。o)
然后,在链接器脚本中,您可以在包含binary.o的地方定义自己的标签。由于您不再引用二进制文件中的任何内容,如果使用-gc-区段开关,二进制文件将被链接器抛出。现在,binary.o中的部分将是abc.data。使用链接器脚本告诉链接器不要抛出binary.o。链接器脚本将包含以下内容:
__binary_start__ = .;
KEEP(*(abc.data))
binary.o
*(abc.data)
. = ALIGN(4);
__binary_end__ = .;发布于 2016-08-12 01:54:19
这个开关--本地化--符号对我有用。
https://stackoverflow.com/questions/20527725
复制相似问题