有没有办法将 COFF 库(lib 文件)转换为 OMF 库以与 C++Builder6 一起使用?这个 coff 不仅仅是导入库,它包含一些代码。当我尝试使用 borland 的 coff2omf.exe 转换它时,我从 15KB 文件中得到 1KB 文件。
5 回答
代替 DigitalMars 转换器,您可以使用http://agner.org/optimize上提供的对象文件转换器
此实用程序可用于在所有 32 位和 64 位 x86 平台的 COFF/PE、OMF、ELF 和 Mach-O 格式之间转换目标文件。可以修改目标文件中的符号名称。可以跨平台构建、修改和转换函数库。可以转储目标文件和可执行文件。还包括一个非常好的反汇编程序,支持 SSE4、AVX、AVX2、FMA 和 XOP 指令集。包含源代码(GPL)。
这是一个很好的低级优化站点,相关的手动 pdf 文件中有很多有用的信息,关于跨多个平台的库格式。
OMF 对象文件比等效的 COFF 对象小很多是相当典型的,因此您得到的结果很可能是有效的。
如果您发现它确实不是,您可能可以将 lib 文件分解为单独的目标文件,反汇编目标文件,将它们重新组装成 OMF 目标文件,然后将它们组合成一个 OMF lib 文件。
这已经很晚了,但是如果有人正在寻找答案,您可以从 DigitalMars 中查看 COFFIMPLIB 。COFF2OMF 在同一个站点上可用,但它看起来更旧。
集成 Delphi (omf) 和 Ada (gcc, coff) 需要付出很多努力,直到我放弃在单个 exe 中完成它。
老实说,我试图将 gcc rtl 和 ada rtl .a(coff 库)分解成许多 .o(对象),通过 coff2omf 转换它们(有 DMD coff2omf 和 iirc 另一个 convobj 左右)。一些 coff .o 未能转换为 .obj 所以我不能说这是否是一种可靠的方式。
当涉及到异常和其他深层细节时,汇编器级别的转换并不是那么简单。
可惜没试过一个叫 ftp://ftp.styx.cabel.net/pub/UniLink/的工具
这并不明显,但 UniLink 可能可以用来实现目标。它的目标之一是 C++ Builder 包(动态和静态)。unilink -Tpp -GI 应该可以解决问题
值得注意的是,在较新版本的 Delphi (>= XE2) 中,编译器接受 COFF 和 OMF。C++ Builder 可能也是如此。64 位编译器仅使用 COFF。有关链接 COFF 的更多信息,请参见此处。