2009-09-24 12 views
7

Voglio creare "gcc cross-compiler" per compilare "c/C++" su ambiente "Linux" ma per target "Windows".Compilare compilatore incrociato GCC (da "Linux" a "Windows")

ho fatto questa finora:

  1. installati gli strumenti e pacchetti necessari per la costruzione di GCC quotata "Prerequisites for GCC" pagina.

  2. scaricati fonti richieste:
    "gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"

  3. Creato questa directory gerarchia:
    "$ {HOME}/gcc/"- per cross-compiler finale
    " $ {HOME}/src/"- per sorgenti
    " $ {HOME}/src/build-binutils/i386-mingw32/"- per la costruzione di binutils su" i386-mingw32 " target
    "$ {HOME}/Src/build-gcc/i386-mingw32/"- per la costruzione di GCC a "i386-mingw32" target

  4. binutils Builded pacchetto:

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

  5. copiato "W32api" e "mingwrt" headers alla directory di installazione:

    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"


E ora, quando sto cercando di costruire la "c (solo) cross-compilatore":

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> 

si stava creando qualcosa di circa 4 minuti e poi mi dà questi errori:

${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 

Da quel messaggio di errore non so davvero cosa fare ora: - (((.


Qualcuno sa dove si trova il problema?
Grazie.

risposta

11

Questo è in realtà OK: il modo in cui vanno le cose, è necessario

  1. binutils costruire
  2. installare intestazioni
  3. costruire un compilatore C parziale: sufficiente per creare i file oggetto, ma non abbastanza per creare un collegamento
  4. costruire il runtime Win32API e minGW (che include il mancante dllcrt2.o)
  5. costruire un compilatore C completo (e altri front-end, ad esempio C++, Fortran, Ada, qualunque cosa, se si wan t them)

Il completamento del passaggio 3 è stato eseguito correttamente; fallisce la creazione di libgcc (che è una libreria di supporto GCC), ma ciò significa che il core del compilatore C è functionnal (anche se non sarà in grado di collegarsi, può comunque creare file di oggetti validi). È possibile verificarlo guardando il file gcc/xgcc nella directory di build GCC.

Quindi, è necessario passare al passaggio successivo, senza preoccuparsi del proprio errore corrente.

(Per actuall installare il compilatore parziale C, è necessario eseguire make con l'opzione -k, per averlo farlo meglio, anche a fronte di errori. Ad esempio, utilizzare make -k install.)

+0

Grazie mille per il tuo commento: "Hai eseguito correttamente il passaggio 3 sopra". Ho pensato che se avessi qualche errore non potrei andare al prossimo passo, ma (fortunatamente) mi sono sbagliato. Successivamente ho compilato con successo win32api, ma ho avuto alcuni errori quando ho provato a compilare mingwrt - c'era qualcosa di sbagliato in "threading". Così ho deciso di compilare gcc con questi parametri: --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. E questo ha funzionato !!! – Petike

+0

Mi dispiace per un piccolo errore del commento precedente: il problema era nell'opzione "condivisa" e NON con l'opzione "discussioni". Così è stato compilato anche senza "--disable-threads" specificato. – Petike

+0

Per quanto riguarda i thread, puoi anche creare GCC con '--enable-libgomp' (per OpenMP) se hai la libreria pthreads-win32 installata. –

0

I gregg attraverso le fonti MinGW, e ho trovato che dllcrt2.o è qualcosa costruito dal pacchetto mingwrt. Suppongo tu debba compilare e installare quello, non solo copiare le intestazioni?

+0

Sì, sì. La copia delle intestazioni è solo una delle tante fasi. Dopo il quinto passaggio nel mio post dovrei fare questo: -6. Costruisci "c (solo) cross-compiler". -7. Aggiungi la posizione con i binari appena compilati alla variabile di ambiente "PATH". -8. Costruisci "win32api". -9. Costruisci "mingwrt". -10. Costruisci "cross-compiler c e C++". Ma per ora sono solo al sesto passo e ricevo quell'errore. – Petike

+0

Hmmm ... non ho mai giocato con MinGW. Ma quando creo un cross-compiler di primo livello, uso "--without-headers" sulla riga configure per dirgli di non fare affidamento su alcun tipo di libreria C o runtime per il target. Non so quale seguace o come le cose funzionano con MinGW, ma forse ci provi. – DevSolar

Problemi correlati