2012-06-17 11 views
5

Durante l'esecuzione di una compilation con croce g ++ in una macchina Linux (Lubuntu 11.10) in modalità dettagliata, posso vedere la lista dei default includere le directory Intestazione:g ++ intestazione di default includono lista

#include <...> search starts here: 
/opt/eldk-4.2/usr/bin/../lib/gcc/powerpc-linux/4.2.2/include 
/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/powerpc-linux 
/opt/eldk-4.2/ppc_4xx/usr/include/c++/4.2.2/backward 
/opt/eldk-4.2/usr/../ppc_4xx/usr/include 

l'esecuzione della stessa g ++ binario in un'altra macchina Linux (Lubuntu 12.10), ottengo un altro elenco diverso, con meno elementi:

#include <...> search starts here: 
/opt/eldk-4.2/usr/bin/../lib/gcc/powerpc-linux/4.2.2/include 

e nel quale alcune delle elments sembra male costruito, come il seguente:

ignoring nonexistent directory "/opt/ppc_4xx/usr/lib/gcc/powerpc-linux/includ../include/c++/4.2.2" 

Il risultato è che la compilazione del codice sul primo sistema non si compila sul secondo perché alcune intestazioni non vengono trovate.

Perché sta succedendo questo ?. Da dove viene questa lista? Chi è responsabile della sua costruzione ?. È possibile cambiarlo facilmente?

Qualsiasi aiuto è apprezzato.

+1

Esegui come 'g ++ -v -H' e vi dirà molto ... –

risposta

5

È possibile aggiungere le directory al percorso di ricerca predefinito impostando le variabili d'ambiente:

  • C_INCLUDE_PATH (per i file di intestazione C)
  • CPLUS_INCLUDE_PATH (per il C++ file di intestazione).

In alternativa, you can create and edit specfile e posizionarlo dove G ++ li cerca. È possibile controllare il percorso con strace gcc.

Additional documentation on specfiles on GCC page.

+0

Purtroppo non conosco nessun posto dove sono memorizzate le directory di default. Sono stati probabilmente incorporati nel compilatore. –

+0

Dubito che venga memorizzato nel compilatore, poiché l'esecuzione dello stesso binario in macchine diverse produce un risultato diverso – Marda

+1

È incorporato nel compilatore, ma i percorsi sono incorporati come percorsi relativi in ​​modo che siano relativi al punto in cui il binario è installato. –

0

ho l'esatto qualche problema utilizzando ELDK 4.2. Questo è molto probabilmente connesso a qualcosa che è cambiato in Ubuntu 12.04 poiché il compilatore è stato eseguito correttamente sullo stesso computer prima dell'aggiornamento.

mio problema è che si sembra aver dimenticato/usr

ignorando directory inesistente "/opt/eldk-4.2/../ppc_82xx/usr/include"

Va

/opt/eldk-4.2/usr/../ppc_82xx/usr/include

Che funziona perfettamente su ubuntu 11.10.

Ho provato sia l'installazione ELDK dalla ISO e copiando l'installazione da una versione funzionante in Ubuntu 11.10

+1

Ho trovato questo, http://answerpot.com/showthread.php?3533926-Ubuntu+12.04+ e+ELDK+4.1 –

+0

Ho "risolto" il mio problema aggiungendo il percorso mancante al file delle specifiche. È un hack, ma. http://www.mingw.org/node/25. Va notato l'ELDK 4.2 ha funzionato sulla mia immagine di Ubuntu che è stata aggiornata dalla 11.04, ma non su una 12.04 appena installata. Esiste una sorta di incompatibilità con il modo in cui i percorsi e i collegamenti vengono risolti. La mia ipotesi è che se un direttorio non finisce con/darà risultati diversi da qualche parte in qualche libreria –

+0

Non sono sicuro che sia un hack - qui è richiesta una soluzione che isola l'ambiente di costruzione dal suo host - altrimenti costruirà semplicemente non essere ripetibile. Una configurazione di ambiente per i tuoi strumenti che può essere controllata dalla versione con il progetto è un must. Infatti, anche la versione che controlla i tuoi strumenti è un buon piano. – marko