链接不同类型的目标文件

Linking object files of differing types

我正在尝试 link 最初由两个不同的汇编器创建的目标文件。我们有一些遗留的汇编代码,这些代码是使用旧的 MRI 汇编器为 68332 处理器编译成目标文件的。我们正在使用 GNU Binutils m68k v2.24 开发一个新的应用程序。我们希望使用由旧汇编程序构建的原始目标文件而不做任何更改。我已经配置了我们的构建环境来执行此操作。由于历史原因,我们的构建环境 link 分为三种输出格式:Srecord、ieee 和 ELF。当我 运行 这对于 Srecord 和 ieee 格式成功而没有错误。但是,对于 ELF 输出格式,我收到以下错误:

m68k-elf-ld: 无法合并文件的目标特定数据

因此没有创建 Elf 文件。

我首先试图理解此错误消息可能意味着什么,但我无法理解。如果有人知道 GNU Binutils ld 文档足以指出错误定义的定义位置,我将不胜感激。

我实际上已经加载了我们的目标和 运行 Srecord 输出。它似乎和以前一样通过了许多测试,所以看起来它是 运行 某种程度。

看起来我们的遗留目标文件可能是 coff 格式的。我想这就是问题所在。有什么办法可以把coff文件转成ELF格式吗?

在此先感谢您的支持。

It looks like our legacy object files may be in coff format format. I would guess that this is the problem. Is there any way to convert a coff file to ELF format?

objcopy 可用于格式之间的转换。然而,要做到这一点,它必须被配置为理解这两种格式。您可以使用 objcopy --info 检查它接受的格式(缩短的列表出现在 objcopy --help 的末尾)。

如果您 objcopy 不支持所需的格式,那么您必须自己构建 binutils。