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

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

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


person David Heffernan    schedule 01.09.2011    source източник
comment
Бях чел някъде, че можете да свържете COFF обектни файлове (създадени с MS VC++ като .obj файлове) в 64-битово приложение на Delphi.   -  person Warren P    schedule 01.09.2011
comment
@Rudy Вече е изпратено. ELF не е добър за Windows.   -  person David Heffernan    schedule 01.09.2011
comment
Разбира се, можете да използвате друг компилатор, който може да излъчва 64-битов COFF или каквото ви трябва, може би един от GNU или LLVM компилаторите? Компилаторът BCC v. 5.5 е безплатният, предполагам? Вече е малко стар и не е много стандартен.   -  person Rudy Velthuis    schedule 01.09.2011
comment
@Rudy Да, безплатният. Да, стар е, но ми е напълно достатъчен. C кодът, който компилирам, е още по-стар, той е излъчен предимно от любимата ми програма, f2c -a.   -  person David Heffernan    schedule 01.09.2011
comment
Ето връзка към безплатен пробен период   -  person LU RD    schedule 01.09.2011
comment
@LU Ще купя продукта, но бих искал да знам отговора.   -  person David Heffernan    schedule 01.09.2011
comment
@LU RD: Отмених отговора си. Като член на TeamB знам добри места, където да науча повече за Delphi, но напоследък бях малко зает и пропуснах действителното доставяне на XE2. ‹g›   -  person Rudy Velthuis    schedule 02.09.2011
comment
Сега, вие не използвате термина за статично свързване правилно :-P BTW, обектният файл винаги е компилиран, така че това също е оксиморон.   -  person Premature Optimization    schedule 08.09.2011
comment
@downvoter какво е $LINK, ако не статично свързване?   -  person David Heffernan    schedule 08.09.2011


Отговори (2)


да Трябва да компилирате файловете с обекти "C" във формат COFF. Това обикновено означава компилаторите Intel и/или MSVC++. Същите предупреждения важат за свързване на 64-битови обектни файлове, които важат за 32-битови. Трябва да се уверите, че всички външни препратки са разрешени правилно, или чрез предоставяне на друг .obj, който има този символ, или от Delphi код. Когато създавате кода „C“, уверете се, че сте деактивирали всички проверки на стека или друго генериране на код за проверка по време на изпълнение. Много пъти такъв codegen разчита на конкретна версия на C/C++ RTL от дадения инструмент.

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

person Allen Bauer    schedule 01.09.2011
comment
Благодаря ти много за отговора, Алън, точно това исках да чуя. Мисля, че най-накрая ще се върна в SA. Още един въпрос, ако обичате, знаете ли дали gcc/mingw произвежда обекти, които могат да се консумират от Delphi? - person David Heffernan; 01.09.2011
comment
Също така си струва да се спомене, че модулът System.Win.Crtl.pas осигурява поддръжка за свързване в много от основните C рутинни процедури, които са необходими при свързване в .obj файлове. Това устройство е част от пакета RTL. Вижте коментарите / отказа от отговорност / предупреждението в изходния файл, преди да го използвате. :) - person Mark Edington; 15.09.2011
comment
Относно OBJ форматите (ако например попитате защо едно и също файлово разширение може да има няколко формата), вижте agner.org/optimize сайт. Актуализира се често, съдържа много интересни материали, особено за 64 бита и крос-платформа. Има дори конвертор между COFF/OMF формати и някакъв междуплатформен декомпилатор. - person Arnaud Bouchez; 03.10.2011

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

person Mason Wheeler    schedule 01.09.2011
comment
Знаете ли какъв формат трябва да бъдат обектите и кои компилатори могат да ги произвеждат? - person David Heffernan; 01.09.2011