【问题标题】:Remove the path in objcopy symbol names删除 objcopy 符号名称中的路径
【发布时间】:2013-12-11 19:00:32
【问题描述】:

我需要在我的项目中包含一个二进制程序。我使用 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 选项剥离路径。

如何去掉符号名称中的路径?

【问题讨论】:

  • @Daniel 你读了吗,为什么我拒绝了--redefine-sym 方法?
  • 我同意 --redefine-sym 不是一个好的解决方案,但我认为您的问题与 OP 基本相同。顺便说一句:我正在寻找同一个问题的答案。我目前的解决方法是将文件复制到目录中,然后执行 objcopy,然后在 Makefile 中 rm 复制 - 丑陋的 kludge。我认为您也可以 cd 到源目录并将 objcopy 的输出重定向回原始目录。 -- 仍然是一个杂乱无章的 IMO。

标签: binutils


【解决方案1】:

我通过在 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__ = .;

【讨论】:

    【解决方案2】:

    开关 --localize-symbols 对我有用。

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2014-05-21
      • 2021-06-22
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多