Могут ли 64-битные цели Delphi статически связываться с скомпилированными объектными файлами C?

Мое 32-разрядное приложение Delphi 2010 ссылается на несколько объектных файлов C, используя $LINK директива компилятора. Могу ли я сделать это в Delphi XE2 при 64-битном таргетинге?

В настоящее время я выполняю компиляцию с использованием bcc32 версии 5.5, но я не возражаю против того, какой компилятор я использую, если выяснится, что компилятор Embarcadero C еще не выводит 64-битные объекты.

2 ответа

Решение

Да. Вы должны скомпилировать файлы объектов "C" в формат COFF. Обычно это означает компиляторы Intel и / или MSVC++. Те же предостережения применимы к связыванию 64-битных объектных файлов, что и к 32-битным. Вы должны убедиться, что все внешние ссылки правильно разрешены, либо предоставив другой.obj с этим символом, либо из кода Delphi. При создании кода "C" обязательно отключите все проверки стека или генерацию другого кода проверки во время выполнения. Много раз такой codegen опирается на конкретную версию C/C++ RTL от данного инструмента.

Следует также отметить, что хотя Delphi 64bit может ссылаться на объектные файлы COFF (в конечном итоге он также будет поддерживать ELF64), 32bit Delphi поддерживает связывание с объектными файлами OMF, созданными в C++ Builder, и, в отличие от XE2, 32-битные объектные файлы COFF, которые могут быть построен с MSVC++. Применяются те же предостережения.

Да, вы можете ссылаться на файлы OBJ в 64-битных проектах XE2, но файлы OBJ должны иметь 64-битный код.

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