2

我需要一个64位的.lib文件转换从COFFOMFCoff2Omf.exe正常工作与32位库,但给...如何将64位COFF转换为OMF?

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

...在64位库。 是否有更新的工具或类似的用于此?

回答

1

不知OMF规范曾经对64位架构的存在。顺便说一下,为什么你需要64位的OMF文件? C++ Builder上的64位版本基于LLVM编译器后端,它生成ELF对象文件(据我所知)

我不知道coff2elf是否与C++ Builder XE7捆绑在一起,但是,也许你可以使用开源工具,如“目标文件转换器”,寻找在这里: http://www.agner.org/optimize/#objconv

+0

我有一个项目针对32位和64位使用Win SDK的lib文件。我需要将它们转换为OMF进行链接。但是你可能是对的,也许现在的情况和现在不同了? –

+0

OMF仅由32位链接器使用。 64位链接器使用ELF64代替。这在Embarcadero的DocWiki中有记载。 –

1

每英巴卡迪诺的文档:

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

对象和库文件格式

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

这种差异意味着,例如,当你迁移32位Windows应用程序,你必须改变引用的.lib和.obj文件是u和的.o,分别。

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

编译的目标文件
ELF64格式

#pragma link

不指定模块名的文件扩展名(.ext),只要因为您正在使用默认文件类型。接头承担MODULENAME的文件扩展名(.ext)以下默认值:

  • .obj扩展BCC32
  • .o扩展:
    基于锵-C++编译器
    BCCOSX

所以,如果你省略.ext,那么正确的扩展名会自动根据你的当前目标平台使用。

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