gpt4 book ai didi

binutils - 删除 objcopy 符号名称中的路径

转载 作者:行者123 更新时间:2023-12-03 10:02:50 26 4
gpt4 key购买 nike

我需要在我的项目中包含一个二进制程序。我使用 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_ .当包含来自不同位置的二进制文件时,这可能会有所帮助。但是当我从不同位置获取文件时,符号会发生变化,这让我感到困扰。由于这将在多个构建站上运行,因此无法使用 --redefine-sym 选项剥离路径。

如何摆脱符号名称中的路径?

最佳答案

我通过在 objcopy 中使用这个开关解决了这个问题:

--prefix-sections=abc

这提供了一种唯一标识二进制对象文件(例如 binary.o)中的数据的方法

在您的链接器脚本中,您可以在包含 binary.o 的位置周围定义自己的标签。由于您不再引用 binary.o 中的任何内容,如果您使用 -gc-sections 开关,链接器将抛出二进制文件。 binary.o 中的部分现在将是 abc.data。在链接器脚本中使用 KEEP 告诉链接器不要丢弃 binary.o。您的链接描述文件将包含以下内容:

__binary_start__ = .;
KEEP(*(abc.data))
binary.o
*(abc.data)
. = ALIGN(4);
__binary_end__ = .;

关于binutils - 删除 objcopy 符号名称中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com