Как преобразовать 64-битный COFF в OMF?

Мне нужно преобразовать 64-битный файл .lib из COFF в OMF. Coff2Omf.exe отлично работает с 32-битными библиотеками, но дает...

ERROR: COFF error: FOOx64.lib
(coffread.cpp, 1637) : invalid machine type detected

... на 64-битной библиотеке. Есть ли обновленный инструмент или аналогичный для этого?


person Max Kielland    schedule 28.06.2015    source источник


Ответы (2)


Согласно документации Embarcadero:

Различия между компиляторами C++ на основе Clang и компиляторами предыдущего поколения Компиляторы C++

Формат файлов объектов и библиотек

  • BCC32 и связанные с ним инструменты используют OMF в файлах .obj и .lib.
  • Компиляторы C++ на основе Clang используют ELF в файлах .o и .a.

Это различие означает, например, что при переносе 32-разрядных приложений Windows вы должны изменить ссылки на файлы .lib и .obj на .a и .o соответственно.

BCC64.EXE, 64-разрядный компилятор Windows C++< /а>

Скомпилированный объектный файл
формат ELF64

ссылка #pragma

Не указывайте расширение файла (.ext) для имени модуля, если вы используете типы файлов по умолчанию. Компоновщики принимают следующие значения по умолчанию для расширения файла (.ext) имени модуля:

  • .obj расширение для BCC32
  • .o для:
    компиляторов C++ на основе Clang
    BCCOSX

Поэтому, если вы опустите .ext, то правильное расширение будет использоваться автоматически в соответствии с вашей текущей целевой платформой.

OMF используется только 32-битным компилятором/компоновщиком. Вместо этого 64-битный компилятор/компоновщик использует ELF64.

person Remy Lebeau    schedule 30.06.2015

Интересно, существовала ли когда-нибудь спецификация OMF для 64-битной архитектуры. Кстати, а зачем вам 64-битные OMF-файлы? 64-битные версии на C++Builder основаны на бэкенде компилятора LLVM, который создает объектные файлы ELF (насколько мне известно)

Я не знаю, есть ли что-то вроде coff2elf в комплекте с C++Builder XE7, но, возможно, вы можете использовать инструменты с открытым исходным кодом, такие как «Конвертер объектных файлов», ищите его здесь: http://www.agner.org/optimize/#objconv

person Sergey Karpukhin    schedule 30.06.2015
comment
У меня есть проект, ориентированный как на 32-битную, так и на 64-битную версию с использованием файлов Win SDK lib. Мне нужно преобразовать их в OMF для связывания. Но, возможно, вы правы, может быть, сейчас это делается по-другому? - person Max Kielland; 30.06.2015
comment
OMF используется только 32-битным компоновщиком. Вместо этого 64-битный компоновщик использует ELF64. Это задокументировано на DocWiki Embarcadero. - person Remy Lebeau; 30.06.2015