2011-09-01 8 views
12

La mia applicazione Delphi 2010 a 32 bit si collega a un numero di file oggetto C utilizzando la direttiva del compilatore $LINK. Posso farlo in Delphi XE2 quando si mira a 64 bit?Delphi a 64 bit può essere collegato in modo statico a file di oggetti C compilati?

Attualmente sto compilando usando bcc32 versione 5.5, ma non mi interessa quale compilatore io uso se si scopre che il compilatore C Embarcadero non ha ancora prodotto oggetti a 64 bit.

+3

Ho letto da qualche parte che è possibile collegare i file oggetto COFF (creati con MS VC++ come file .obj) in un'applicazione Delphi a 64 bit. –

+1

@Rudy È già stato spedito. ELF non va bene per Windows. –

+0

Ovviamente potresti usare un altro compilatore che può emettere COFF a 64 bit o qualsiasi altra cosa tu abbia bisogno, forse uno dei compilatori GNU o LLVM? Il compilatore BCC v. 5.5 è quello gratuito, suppongo? È già un po 'vecchio e non molto standard. –

risposta

32

Sì. È necessario compilare i file degli oggetti "C" nel formato COFF. Questo di solito significa compilatori Intel e/o MSVC++. Le stesse avvertenze si applicano ai collegamenti a file a 64 bit che si applicano a 32 bit. Devi assicurarti che tutti i riferimenti esterni siano correttamente risolti, fornendo un altro .obj che ha quel simbolo o dal codice Delphi. Quando si crea il codice "C", assicurarsi di disabilitare qualsiasi controllo dello stack o altra generazione di codice di verifica in fase di esecuzione. Molte volte tale codegen si basa su una versione specifica di RTL C/C++ dallo strumento fornito.

Un'altra cosa da notare è che, mentre Delphi a 64 bit in grado di creare un collegamento a file oggetto COFF (alla fine sarà anche il supporto elf64), 32 bit Delphi supporta il collegamento con C++ Builder costruita file OMF oggetto e, nuovi a XE2, 32bit File oggetto COFF che possono essere creati con MSVC++. Si applicano gli stessi avvertimenti.

+0

Grazie mille per aver risposto ad Allen, questo è esattamente quello che volevo sentire. Penso che finalmente stia per tornare su SA. Ancora una domanda, per favore, sai se gcc/mingw produce oggetti che possono essere consumati da Delphi? –

+6

Vale anche la pena ricordare che l'unità System.Win.Crtl.pas fornisce supporto per il collegamento in molte delle routine di runtime C di base necessarie quando si effettua il collegamento nei file obj. Questa unità fa parte del pacchetto RTL. Vedi i commenti/disclaimer/avvertenze nel file sorgente prima di usarlo. :) –

+1

Informazioni sui formati OBJ (se, per esempio, si chiede perché la stessa estensione di file possa avere diversi formati), consultare il sito http://agner.org/optimize. Viene aggiornato frequentemente, contiene un sacco di materiale interessante, in particolare su 64 bit e multipiattaforma. Esiste anche un convertitore tra i formati COFF/OMF e alcuni decompilatori multipiattaforma. –

3

Sì, è possibile collegarsi a file OBJ in progetti XE2 a 64 bit, ma i file OBJ devono essere codice a 64 bit.

+0

Sapete che formato devono essere gli oggetti e quali compilatori possono produrli? –

+0

@David: vedi la risposta di Allen. –