2011-09-26 9 views
55

Ho bisogno di un posto dove installare le librerie in una macchina Linux a cui non ho accesso. Sto usando ~/local [/ bin,/lib,/include], ma non so come posso dire ./configure per cercare le librerie lì (in particolare, sto cercando di compilare emacs, che ha bisogno di libgif , che non viene nella mia distribuzione).Come aggiungere percorsi di inclusione e lib per configurare/fare ciclo?

Ho provato ad aggiungere

export PATH=$PATH:~/local/bin 
export LD_LIBRARY_PATH=~/local/lib 
export C_INCLUDE_PATH=~/local/include 
export CPLUS_INCLUDE_PATH=~/local/include 

a .bashrc, ma non sembra funzionare.

+2

Nota che, ad eccezione del PERCORSO, si sovrascrivono quelli predefiniti del sistema. Se crei qualcosa come "export C_INCLUDE_PATH = ~/local/include: $ C_INCLUDE_PATH', il tuo compilatore cercherà prima in' ~/local/include', e in $ C_INCLUDE_PATH solo se non ha trovato l'inclusione nella prima directory . –

risposta

73

volete che un file config.site. Prova:

 
$ mkdir -p ~/local/share 
$ cat <<EOF> ~/local/share/config.site 
CPPFLAGS=-I$HOME/local/include 
LDFLAGS=-L$HOME/local/lib 
... 
EOF 

Ogni volta che si richiama un autoconf generato configurare script con --prefix = $ HOME/locale, il config.site verrà letto e tutte le assegnazioni sarà fatto per voi. CPPFLAGS e LDFLAGS dovrebbero essere tutto ciò di cui hai bisogno, ma puoi anche fare tutti gli altri incarichi desiderati (da qui il ... nell'esempio sopra). Si noti che -I flag appartengono a CPPFLAGS e non a CFLAGS, poiché -I è inteso per il pre-processore e non per il compilatore.

+0

William; Un grazie, è stato un consiglio su CPPFLAGS per costruire su un host condiviso. Salvato molto su con fallito ./configure gira oggi, a causa della tua nota. –

25

Set LDFLAGS e CFLAGS quando si esegue fare:

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make 

Se non si vuole fare che un gazillion volte, esportare questi nel vostro .bashrc (o la shell equivalente). Anche impostare LD_LIBRARY_PATH per includere/home/me/local/lib:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib 
+0

quando aggiungo LDFLAGS e CFLAGS a .bashrc ./configure non riesce con una configurazione: errore: il compilatore C non può creare gli eseguibili ... – Lacrymology

+0

Probabilmente sostituiscono i parametri del compilatore di configurazione del codice di test. Basta usare make env prefetching. Prova anche a vedere se configure non ha già un'opzione per sovrascrivere libgif.Se gli script di autotools sono fatti correttamente, ti consentirà di specificare un percorso in cui è installato libgif (ad esempio, ignora la posizione predefinita della libreria). Questa sarebbe la soluzione più pulita. – long404

+0

stessa differenza .. tneme @ ws16lab07: ~/Descargas/emacs-23.3 $ LDFLAGS = "- L/home/tneme/local/lib" CFLAGS = "- l/home/tneme/local/include" ./configure - -prefix = "/ home/tneme/local" verifica il tipo di sistema di compilazione ... i686-pc-linux-gnu verifica il tipo di sistema host ... i686-pc-linux-gnu verifica per gcc ... gcc verificare se il compilatore C funziona ... no configurare: errore: in '/home/tneme/Descargas/emacs-23.3 ': configurare: errore: il compilatore C non può creare gli eseguibili Vedere' config.log' per ulteriori dettagli t – Lacrymology

8

Ci è voluto un po 'per andare bene. Ho avuto questo problema durante la compilazione incrociata in Ubuntu per un target ARM. Ho risolto con: non viene utilizzato con autogen.sh/configure

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf 

CFLAGS Privacy, utilizzando mi ha dato l'errore: "configure: error: compilatore C non può creare eseguibili". Nell'ambiente di costruzione che stavo usando, è stato fornito uno script autogen.sh, se non si ha uno script autogen.sh sostitutivo ./autogen.sh con ./configure nel comando precedente. Ho eseguito config.guess sul sistema di destinazione per ottenere il parametro --host.

Dopo aver eseguito con successo autogen.sh/configure, compilare con:

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make 

Il CFLAGS ho scelto di usare sono: "-march = ARMv5TE -fno-tree-vectorize -mthumb-Interwork -mcpu = ARM926EJ -S". Ci vorrà un po 'per avere tutte le directory di inclusione configurate correttamente: potresti voler includere alcune opzioni che puntano al tuo cross-compiler e alcune che puntano al tuo file system di root include, e probabilmente ci saranno alcuni conflitti.

Sono sicuro che questa non è la risposta perfetta. E sto ancora vedendo alcune directory include che puntano a/e non/ccrootfs nei Makefile. Mi piacerebbe sapere come correggere questo. Spero che questo aiuti qualcuno.

Problemi correlati