如何将64位COFF转换为OMF?

时间:2015-06-28 01:28:36

标签: static-libraries 32bit-64bit c++builder c++builder-xe7 omf2coff

我需要将64位.lib文件从COFF转换为OMFCoff2Omf.exe可以正常使用32位库,但是给出了......

ERROR: COFF error: FOOx64.lib
(coffread.cpp, 1637) : invalid machine type detected

...在64位lib上。 是否有更新的工具或类似用途?<​​/ p>

2 个答案:

答案 0 :(得分:2)

Per Embarcadero的文件:

Differences Between Clang-based C++ Compilers and Previous-Generation C++ Compilers

  

对象和库文件格式

     
      
  • BCC32及其相关工具在.obj和.lib文件中使用OMF。
  •   
  • 基于Clang的C ++编译器在.o和.a文件中使用ELF。
  •   
     

这种差异意味着,例如,当您迁移32位Windows应用程序时,必须将.lib和.obj文件的引用分别更改为.a和.o。

BCC64.EXE, the C++ 64-bit Windows Compiler

  

编译对象文件
   ELF64格式

#pragma link

  

只要您使用默认文件类型,就不要指定modulename的文件扩展名(.ext)。连接器假定modulename的文件扩展名(.ext)具有以下默认值:

     
      
  • .obj BCC32
  • 的扩展程序   
  • .o分机:
      基于Clang的C ++编译器
      BCCOSX
  •   
     

因此,如果省略.ext,则根据您当前的目标平台自动使用正确的扩展名。

OMF仅由32位编译器/链接器使用。 64位编译器/链接器使用ELF64代替。

答案 1 :(得分:1)

我想知道OMF规范是否曾存在于64位架构中。顺便问一下,为什么需要64位OMF文件? C ++ Builder上的64位版本基于LLVM编译器后端,后端生成ELF目标文件(据我所知)

我不知道coff2elf之类的东西是否与C ++ Builder XE7捆绑在一起,但是,您可以使用开源工具,例如&#34; Object File Converter&#34;,在这里查找: http://www.agner.org/optimize/#objconv