我需要将 64 位 .lib 文件COFF
从OMF
. Coff2Omf.exe
与 32 位库一起工作正常,但给...
ERROR: COFF error: FOOx64.lib
(coffread.cpp, 1637) : invalid machine type detected
...在 64 位库上。是否有用于此的更新工具或类似工具?
我需要将 64 位 .lib 文件COFF
从OMF
. Coff2Omf.exe
与 32 位库一起工作正常,但给...
ERROR: COFF error: FOOx64.lib
(coffread.cpp, 1637) : invalid machine type detected
...在 64 位库上。是否有用于此的更新工具或类似工具?
根据 Embarcadero 的文档:
基于 Clang 的 C++ 编译器与上一代 C++ 编译器之间的差异
对象和库文件格式
- BCC32 及其相关工具在 .obj 和 .lib 文件中使用 OMF。
- 基于 Clang 的 C++ 编译器在 .o 和 .a 文件中使用 ELF。
这种差异意味着,例如,当您迁移 32 位 Windows 应用程序时,您必须将对 .lib 和 .obj 文件的引用分别更改为 .a 和 .o。
BCC64.EXE,C++ 64 位 Windows 编译器
编译后的目标文件
ELF64 格式
只要您使用默认文件类型,就不要指定模块名的文件扩展名 (.ext)。链接器假定 modulename 的文件扩展名 (.ext) 具有以下默认值:
.obj
BCC32 扩展.o
扩展:
基于 Clang 的 C++ 编译器
BCCOSX因此,如果您省略
.ext
,则会根据您当前的目标平台自动使用正确的扩展名。
OMF 仅由 32 位编译器/链接器使用。64 位编译器/链接器使用 ELF64 代替。
我想知道 OMF 规范是否曾经存在于 64 位架构。顺便问一下,为什么需要 64 位 OMF 文件?C++Builder 上的 64 位版本基于 LLVM 编译器后端,它生成 ELF 对象文件(据我所知)
我不知道 coff2elf 之类的东西是否与 C++Builder XE7 捆绑在一起,但是,也许你可以使用开源工具,比如“对象文件转换器”,在这里寻找它: http ://www.agner.org/optimize /#objconv