2009-09-24 11 views
7

Quiero compilar "compilador cruzado gcc" para compilar aplicaciones "c/C++" en el entorno "Linux" pero para el objetivo "Windows".Construyendo compilador cruzado GCC (de "Linux" a "Windows")

he hecho esto hasta ahora:

  1. instalado las herramientas y los paquetes necesarios para la construcción de GCC que aparece en la página "Prerequisites for GCC".

  2. descargados fuentes requeridas:
    "gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"

  3. Creado esta jerarquía de directorios:
    "$ {HOME}/gcc/"- para el compilador cruzado final
    " $ {HOME}/src/"- para las fuentes
    " $ {HOME}/src/build-binutils/i386-mingw32/"- para construir binutils en" i386-mingw32 " objetivo
    "$ {HOME}/Src/build-gcc/i386-mingw32/"- para la construcción de gcc para "i386-mingw32" objetivo

  4. binutils Builded paquete:

    cd" $ {HOME}/src/build-binutils/i386 -mingw32 /"
    ../../binutils-2.19.1/configure --prefix = "$ {HOME}/gcc" --target = i386-mingw32 --disable-nls
    hacen
    make install

  5. copiado y encabezados "" "W32api mingwrt" al directorio de instalación:

    cp -R "$ {HOME} /src/w32api-3.13-mingw32/include" "$ {HOME}/gcc/i386-mingw32"
    cp -R "$ {HOME} /src/mingwrt-3.16- mingw32/include" "$ {HOME}/gcc/i386-mingw32"


Y ahora, cuando estoy tratando de construir el "c (sólo) compilador cruzado":

cd "${HOME}/src/build-gcc/i386-mingw32/" 
../../gcc-4.4.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --enable-languages=c --with-headers="${HOME}/gcc/i386-mingw32/include" --disable-nls 
make<br> 

estaba construyendo algo de aproximadamente 4 minutos y luego me da estos errores:

${HOME}/gcc/i386-mingw32/bin/ld: dllcrt2.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
make[2]: *** [libgcc_s.dll] Error 1 
make[2]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32/i386-mingw32/libgcc' 
make[1]: *** [all-target-libgcc] Error 2 
make[1]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32' 
make: *** [all] Error 2 

De ese mensaje de error Realmente no sé qué hacer ahora: - (((.


¿Alguien sabe dónde está el problema?
Gracias.

Respuesta

11

Eso es en realidad estaba bien: el curso de las cosas, es necesario

  1. construcción de Binutils
  2. instalar las cabeceras
  3. construir el compilador C parcial: suficiente para crear archivos de objetos, pero no lo suficiente para vincular
  4. construir el win32api y MinGW tiempo de ejecución (que incluye su falta dllcrt2.o)
  5. construir un compilador de C completa (y otros front-end, como C++, Fortran, Ada, lo que sea, si wan t ellos)

Ha realizado con éxito el paso 3 anterior; falla al generar libgcc (que es una biblioteca de soporte de GCC), pero eso significa que el núcleo del compilador de C es funcional (aunque no podrá enlazar, aún puede crear archivos de objetos válidos). Puede verificarlo mirando el archivo gcc/xgcc en su directorio de construcción de GCC.

Por lo tanto, debe pasar al siguiente paso, sin preocuparse por su falla actual.

(Para Actuall instalar el compilador de C parcial, se debe ejecutar make con la opción -k, tener que hacerlo mejor, incluso en la cara de errores. Por ejemplo, utilice make -k install.)

+0

Muchas gracias por su comentario: "Ha realizado con éxito el paso 3 anterior". Pensé que si obtenía algún error no podía pasar al siguiente paso, pero (afortunadamente) estaba equivocado. A continuación, compilé satisfactoriamente win32api, pero obtuve algunos errores cuando intenté compilar mingwrt; algo estaba mal con "enhebrar". Así que decidí compilar gcc con estos parámetros: --prefix = "$ {HOME}/gcc" --target = i386-mingw32 --program-prefix = i386-mingw32 --enable-languages ​​= c, C++ --with -headers = "$ {HOME}/gcc/i386-mingw32/include" --disable-nls --disable-threads --disable-shared --disable-libssp. ¡Y esto funcionó! – Petike

+0

Lamento un pequeño error del comentario anterior: el problema estaba en la opción "compartida" y NO en la opción "hilos". Entonces compiló también sin "--disable-threads" especificado. – Petike

+0

En cuanto a los hilos, también puede compilar GCC con '--enable-libgomp' (para OpenMP) si tiene instalada la biblioteca pthreads-win32. –

0

Analicé las fuentes de MinGW y encontré que dllcrt2.o es algo creado a partir del paquete mingwrt. Supongo que tiene que compilar e instalar eso, no solo copiar los encabezados.

+0

Sí, sí. Copiar encabezados es solo uno de muchos pasos. Después del 5º paso en mi publicación debo hacer esto: -6. Construye "c (solo) compilador cruzado". -7. Agregue la ubicación con los binarios compilados a la variable de entorno "PATH". -8. Construye "win32api". -9. Construye "mingwrt". -10. Construye el compilador cruzado "c y C++". Pero por ahora solo estoy en el 6to paso y obtengo ese error. – Petike

+0

Hmmm ... no he jugado con MinGW. Pero cuando configuro un compilador cruzado de primera etapa, uso "--without-headers" en la línea de configuración para indicarle que no confíe en ningún tipo de biblioteca C o en el tiempo de ejecución para el destino. No sé qué instrucciones estás siguiendo o cómo funcionan las cosas con MinGW, pero tal vez le das una oportunidad. – DevSolar

Cuestiones relacionadas