2009-05-17 14 views
6

Estoy de acuerdo con el uso de Cygwin o MinGW, pero necesito terminar con un código de 64 bits, no de 32 bits. Esto se debe a que llamaré a la DLL desde C# administrado de 64 bits. Parece que no puedo encontrar buenas referencias para configurar esas herramientas para crear binarios de 64 bits. Además, sería bueno que el GCC fuera la versión 4, no la versión 3, como venía con mi instalación de Cygwin.¿Cómo compilar el código posix existente para Windows de 64 bits?

Una alternativa sería alguna forma de comunicación entre procesos. Lo investigaré, pero lo que pretendo es lo que realmente quiero.

+0

Encontré una compilación de ventanas Ming64 en http://www.drangon.org/mingw/ que parecía que estaba a punto de funcionar. No hubo problemas con los archivos de cabecera no encontrados, etc. Pero entonces cc1plus.exe (llamado por g ++) se colgó. Suspiro. – Fantius

Respuesta

6

El 64-bit MinGW, basado en (recién lanzado) gcc-4.4.0, es probablemente su mejor opción. (Dado que el proyecto MinGW-W64 en sourceforge.net se está moviendo a mingw-w64.org que es mejor utilizar mingw-w64.org)

Las instrucciones detalladas:
1. Descargar el archive
2. Extraer en algún lugar bajo Cygwin. En mi caso, el directorio de cygwin de nivel superior es C:\cygwin, extraje el paquete en mingw directorio, y terminó con el siguiente contenido en C:\cygwin\mingw (que es visible como /mingw bajo Cygwin:

$ ls -l /mingw 
total 1 
drwxr-xr-x+ 2 user None 0 May 10 08:32 bin 
drwxr-xr-x+ 2 user None 0 May 10 05:45 include 
drwxr-xr-x+ 2 user None 0 May 10 08:30 info 
drwxr-xr-x+ 3 user None 0 May 10 08:30 lib 
drwxr-xr-x+ 3 user None 0 May 10 05:45 libexec 
drwxr-xr-x+ 4 user None 0 May 10 05:45 man 
lrwxrwxrwx 1 user None 17 May 17 17:20 mingw -> x86_64-pc-mingw32 
drwxr-xr-x+ 3 user None 0 May 10 04:16 share 
drwxr-xr-x+ 5 user None 0 May 10 04:18 x86_64-pc-mingw32 

3. Ahora compilar algunas . código C++ utilicé:

// t.cc 
#include <vector> 
#include <string> 

using namespace std; 
int main() 
{ 
    vector<string> vs; 
    vs.push_back("abc"); 
} 

y compilar esta manera:

$ /mingw/bin/x86_64-pc-mingw32-g++ t.cc 

4. Por último, verif y el resultado es un/x 64 ejecutable de Windows, mediante la ejecución de dumpbin /headers a.exe:

Microsoft (R) COFF/PE Dumper Version 7.00.9466 
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file a.exe 

PE signature found 

File Type: EXECUTABLE IMAGE 

FILE HEADER VALUES 
      8664 machine (AMD64) 
       10 number of sections 
     4A10AF9F time date stamp Sun May 17 17:45:19 2009 
      ABA00 file pointer to symbol table 
      EC4 number of symbols 
       F0 size of optional header 
       27 characteristics 
        Relocations stripped 
        Executable 
        Line numbers stripped 
        Application can handle large (>2GB) addresses 
+0

Esos son paquetes de Linux, ¿verdad? Me gustaría construir y ejecutar en Windows. – Fantius

+0

Ahh, acabo de ver una compilación de Windows en la carpeta de compilaciones automatizadas en el enlace que ha publicado. Creo que eso será exactamente lo que necesito. – Fantius

+0

Tengo problemas para hacer este trabajo. Cuando instalé MinGW32, utilicé un instalador. Este no es un instaladorHe agregado la carpeta bin a mi ruta y puede encontrar g ++, pero g ++ no tiene idea de dónde buscar los encabezados y las bibliotecas. Cuando usé el instalador, todo funcionó. – Fantius

0

El gcc docs dicen:

Estos interruptores `-m' están soportados en Además de lo anterior en AMD x86 64 procesadores en entornos de 64 bits.

-m32 -m64 Generar código para un entorno de 32 o 64 bits. El entorno de 32 bits establece int, long y puntero en 32 bits y genera código que se ejecuta en cualquier sistema i386. El entorno de 64 bits establece int en 32 bits y de longitud y el puntero a 64 bits y genera código para la arquitectura x86-64 de AMD.

Tenga en cuenta que eso va a volver loco, creo que, si MinGW realmente lo hace de esa manera, ya que normalmente en Windows 64 larga es de 32 bits y de largo tiempo es la de 64 bits triple de tamaño tipo.

+1

Lo probé en Cygwin y MinGW y ambos se quejaron de que el modo de 64 bits no está compilado. Eso es más o menos lo que esperaba que sucediera porque no tengo la versión de 64 bits de ninguna de esas cosas. Eso es lo que trato de encontrar. – Fantius

+1

El mingw gcc configurado con --target = x86_64-pc-mingw32 produce código con sizeof (long) == 4 y sizeof (long long) == 8 –

Cuestiones relacionadas