Преобразование файла COFF lib в формат OMF - PullRequest
5 голосов
/ 25 июня 2010

Есть ли способ конвертировать библиотеку COFF (файл lib) в библиотеку OMF для использования с C ++ Builder6?Этот coff - не просто библиотека импорта, он содержит некоторый код.Когда я пытаюсь конвертировать его с помощью borland's coff2omf.exe, я получаю файл размером 1 КБ из файла 15 КБ.

Ответы [ 5 ]

6 голосов
/ 03 октября 2011

Вместо конвертера DigitalMars вы можете использовать Конвертер файлов объектов , доступный по адресу http://agner.org/optimize

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

Это отличный сайт для низкоуровневой оптимизации, и в связанном pdf-файле , посвященном форматам библиотек для нескольких платформ, содержится много полезной информации.

3 голосов
/ 25 июня 2010

Для объектного файла OMF довольно типично быть лот меньше, чем эквивалентный объект COFF, так что то, что вы получаете, вполне может быть действительным.

Если вы обнаружите, что это действительно не так, вы, вероятно, можете разбить файл lib на отдельные объектные файлы, разобрать объектные файлы, повторно собрать их в объектные файлы OMF и собрать их вместе в файл lib OMF.

2 голосов
/ 01 декабря 2010

Это довольно поздно, но если кто-то ищет ответ, вы можете оформить заказ COFFIMPLIB в DigitalMars. COFF2OMF доступен на том же сайте, но, похоже, он старше.

1 голос
/ 17 мая 2012

Интеграция Delphi (omf) и Ada (gcc, coff) требовала больших усилий, пока я не перестал делать это в одном exe.

Честно говоря, я попытался разложить gcc rtl и ada rtl .a (библиотеки coff) на множество .o (объектов), преобразовать их через coff2omf (там были DMD coff2omf и iirc еще один объект или около того). Некоторые из coff .o не удалось преобразовать в .obj, поэтому я не могу сказать, был ли это вообще надежный способ.

Преобразование уровня ассемблера не так просто, когда речь идет об исключениях и других глубоких деталях.

Жаль, что я не пробовал инструмент под названием FTP: //ftp.styx.cabel.net/pub/UniLink/

Это не очевидно, но UniLink, вероятно, можно использовать для достижения цели. Одной из его целей является пакет C ++ Builder (как динамический, так и статический). unilink -Tpp -GI должен сделать трюк

0 голосов
/ 07 мая 2013

Стоит отметить, что в более новых версиях Delphi (> = XE2) компилятор принимает как COFF, так и OMF. Это, вероятно, также верно для C ++ Builder. 64-битные компиляторы используют только COFF. См. здесь для получения дополнительной информации о связывании COFF.

...