我需要将64位.lib文件从COFF
转换为OMF
。 Coff2Omf.exe
可以正常使用32位库,但是给出了......
ERROR: COFF error: FOOx64.lib
(coffread.cpp, 1637) : invalid machine type detected
...在64位lib上。 是否有更新的工具或类似用途?</ p>
答案 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格式
只要您使用默认文件类型,就不要指定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