【问题标题】:OMF format to COFF formatOMF 格式转 COFF 格式
【发布时间】:2013-06-03 08:22:59
【问题描述】:

有没有像 Borland "coff2omf.exe" 这样的工具来将 Borland OMF LIB 格式转换为 MS VC++ COFF LIB 格式?

实际上我想在 delphi 中创建 .obj 文件并在 MSVC++ 中使用它。

【问题讨论】:

  • 你的 Delphi 代码有多复杂?它是否使用了 Delphi RTL 的任何部分?

标签: delphi visual-c++ coff omf


【解决方案1】:

是的,有这样的工具。

this tool

此实用程序可用于在所有 32 位和 64 位 x86 平台的 COFF/PE、OMF、ELF 和 Mach-O 格式之间转换目标文件。可以修改目标文件中的符号名称。可以跨平台构建、修改和转换函数库。可以转储目标文件和可执行文件。还包括一个非常好的反汇编程序,支持 SSE4、AVX、AVX2、FMA 和 XOP 指令集。包含源代码(GPL)。手动。

请注意,这个http://www.agner.org 网站是我所知道的关于低级优化的最佳资源。如果您想处理性能问题,所有链接信息都值得一读。

但是对于在 VC++ 中使用 Delphi 生成的.obj 来说,这并不容易,但对于非常小的部分代码而言。您将需要代码中使用的 Delphi RTL。外部.dll 要好得多。另请注意,某些类型(如字符串或动态数组)在 VC++ 中不容易修改。

【讨论】:

  • 你有使用过这个工具的经验吗?我从来没有运气。
  • 我玩了很多时间。完美运行。但大多数时候,你当然需要了解底层的 asm 知识。
  • 我猜当您将 Pascal 缩减为不使用 Delphi RTL 的东西时,将其移植到 C 就很容易了!
  • 感谢我认为我的问题已解决:Microsoft 链接器和库管理器可以从 32 位 OMF 转换为 COFF。微软编译器自带的Editbin工具可以将32位的OMF转换为COFF并修改COFF文件。
  • @DavidHeffernan 你是对的:事实上,我使用这个工具在 Delphi 程序中执行 C 代码,而不是相反。主要目的是使用良好的浮点计算(Delphi 不擅长)、一些第三方库和/或一些低级 asm/操作码(例如 VIA 挂锁执行)。在 Windows 和 Linux 上都使用了相同的 .obj(当然没有使用任何 PIC)。
【解决方案2】:

据我所知,没有这样的工具。使用 Arnaud 所指的工具 Agner Fog 的目标文件转换器,我从未成功将 Delphi 单元转换为可链接到 MSVC 程序的 COFF .obj。

我确实认为获取 Delphi 源代码,对其进行编译,然后在 MSVC 中使用生成的对象是不现实的。另一个方向是完全可能的。您可以将 C 代码编译为一个对象,并将该对象链接到您的 Delphi 可执行文件。当你这样做时,你需要解决编译对象所具有的任何依赖关系。

但是要将 Delphi 对象链接到 C/C++ 程序将需要您使用的 Delphi RTL 的任何部分。除非您碰巧不使用 Delphi RTL 的任何部分,否则这将很棘手,这似乎不太可能。

在您的情况下,我认为您的选择是:

  1. 将代码移植到 C 或 C++。
  2. 将 Delphi 代码编译成动态库并从 C++ 程序链接到该动态库。

【讨论】:

  • :谢谢您的建议,但我认为这是可能的。我的一位老朋友完成了这项工作,他将 delphi .obj 转换为 coff 并在 vc++ dll 中用于 AV 引擎。 (对不起我的英语不好)
  • 我从未找到任何有效的方法。我永远无法使 Arnaud 提到的工具与 Borland OMF 一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2012-02-29
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多