Формат OMF в формат COFF

Есть ли такой инструмент, как Borland "coff2omf.exe" для преобразования формата Borland OMF LIB в формат MS VC++ COFF LIB?

на самом деле я хочу создать файл.obj в Delphi и использовать его в MSVC++ .

2 ответа

Решение

Насколько я знаю, такого инструмента нет. Используя конвертер объектных файлов Agner Fog, инструмент, на который ссылается Арно, мне никогда не удавалось преобразовать модуль Delphi в COFF .obj, который можно связать с программой MSVC.

Я считаю, что нереально взять исходный код Delphi, скомпилировать его, а затем использовать сгенерированный объект в MSVC. Другое направление вполне возможно. Вы можете скомпилировать код C в объект и связать этот объект с исполняемым файлом Delphi. Когда вы делаете это, вам нужно разрешить все зависимости, которые есть у скомпилированного объекта.

Но для того, чтобы связать объект Delphi с программой на C/C++, потребуется любая часть Delphi RTL, которую вы используете. И это будет сложно, если только вы не используете какую-либо часть Delphi RTL, что кажется маловероятным.

В вашей ситуации я думаю, что ваши варианты:

  1. Портируйте код на C или C++.
  2. Скомпилируйте код Delphi в динамическую библиотеку и создайте ссылку на него из вашей программы на C++.

Да, такой инструмент есть.

Смотрите этот инструмент.

Эта утилита может использоваться для преобразования объектных файлов между форматами COFF/PE, OMF, ELF и Mach-O для всех 32-разрядных и 64-разрядных платформ x86. Может изменять имена символов в объектных файлах. Может создавать, изменять и конвертировать библиотеки функций на разных платформах. Может дамп объектных файлов и исполняемых файлов. Также включает в себя очень хороший дизассемблер, поддерживающий наборы инструкций SSE4, AVX, AVX2, FMA и XOP. Исходный код включен (GPL). Руководство.

Обратите внимание, что этот http://www.agner.org/ веб-сайт - лучший ресурс, который я знаю о низкоуровневой оптимизации. Вся связанная информация стоит прочитать, если вы хотите иметь дело с производительностью.

Но для использования Delphi-генерируется .obj с VC++ это не будет легко выполнимо, но для очень маленькой части кода. Вам понадобится Delphi RTL, используемый в вашем коде. Внешний .dll намного лучше. Также обратите внимание, что некоторые типы (например, строки или динамические массивы) не будут легко модифицируемыми в VC++.

Другие вопросы по тегам