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

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

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

Ответы [ 2 ]

32 голосов
/ 01 сентября 2011

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

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

3 голосов
/ 01 сентября 2011

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

...