链接不同类型的对象文件

时间:2016-11-03 19:14:27

标签: linker ld elf binutils coff

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

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

因此,不会创建Elf文件。

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

我实际加载了目标并运行了Srecord输出。它似乎和以前一样通过了许多测试,因此它似乎在某种程度上运行。

看起来我们的遗留对象文件可能采用coff格式。我猜这是问题所在。有没有办法将coff文件转换为ELF格式?

提前感谢您的支持。

1 个答案:

答案 0 :(得分:1)

  

看起来我们的遗留对象文件可能采用coff格式。我猜这是问题所在。有没有办法将coff文件转换为ELF格式?

objcopy可用于在格式之间进行转换。但是,要做到这一点,必须配置它来理解这两种格式。您可以使用objcopy --info检查其接受的格式(缩写列表显示在objcopy --help的末尾)。

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