2011-09-01 5 views
12

Mi aplicación Delphi 2010 de 32 bits se vincula a un número de archivos de objeto C utilizando la directiva del compilador $LINK. ¿Puedo hacer esto en Delphi XE2 cuando objetivo 64 bits?¿Puede Delphi de 64 bits dirigirse estáticamente a los archivos compilados del objeto C?

Actualmente estoy compilando utilizando la versión 5.5 de bcc32, pero no me importa qué compilador use si resulta que el compilador de Embarcadero C aún no muestra objetos de 64 bits.

+3

He leído que puede vincular archivos de objeto COFF (creados con MS VC++ como archivos .obj) en una aplicación Delphi de 64 bits. –

+1

@Rudy Ya ha sido enviado. ELF no es bueno para Windows. –

+0

Por supuesto, podría usar otro compilador que pueda emitir COFF de 64 bits o lo que necesite, quizás uno de los compiladores GNU o LLVM? El compilador de BCC v. 5.5 es el gratuito, supongo? Ya es un poco viejo, y no muy estándar. –

Respuesta

32

Sí. Debe compilar los archivos de objetos "C" en formato COFF. Esto generalmente significa los compiladores Intel y/o MSVC++. Las mismas advertencias se aplican a la vinculación de archivos de objetos de 64 bits que se aplican a 32 bits. Debe asegurarse de que todas las referencias externas se resuelvan correctamente, ya sea proporcionando otro .obj que tenga ese símbolo, o desde el código Delphi. Al crear el código "C", asegúrese de desactivar cualquier comprobación de pila u otra generación de código de verificación en tiempo de ejecución. Muchas veces, tal codegen se basa en una versión específica del C/C++ RTL de la herramienta dada.

Otra cosa a destacar es que mientras Delphi de 64 bits puede enlazar a archivos objeto COFF (eventualmente se apoyará también ELF64), 32 bits de Delphi permite el acoplamiento con C++ Builder de construcción archivos OMF objeto y, a nuevos XE2, 32 bits Archivos de objeto COFF que se pueden compilar con MSVC++. Se aplican las mismas advertencias.

+0

Muchas gracias por responder Allen, esto es exactamente lo que quería escuchar. Creo que por fin estoy a punto de regresar a SA. Una pregunta más si lo deseas, ¿sabes si gcc/mingw produce objetos que Delphi puede consumir? –

+6

También vale la pena mencionar que la unidad System.Win.Crtl.pas proporciona soporte para vincular en muchas de las rutinas de tiempo de ejecución de C básicas que se necesitan al vincular archivos .obj. Esta unidad es parte del paquete RTL. Vea los comentarios/descargo de responsabilidad/advertencia en el archivo fuente antes de usarlo. :) –

+1

Acerca de los formatos OBJ (si, por ejemplo, pregunta por qué la misma extensión de archivo puede tener varios formatos), consulte http://agner.org/optimize sitio. Se actualiza con frecuencia, contiene un montón de material interesante, especialmente sobre 64 bits y multiplataforma. Incluso hay un convertidor entre formatos COFF/OMF y algún descompilador multiplataforma. –

3

Sí, puede vincular a archivos OBJ en proyectos XE2 de 64 bits, pero los archivos OBJ tienen que ser de código de 64 bits.

+0

¿Sabe qué formato deben ser los objetos y qué compiladores pueden producirlos? –

+0

@David: vea la respuesta de Allen. –

Cuestiones relacionadas