2013-04-05 15 views
14

Sto cercando di capire come impostare alcune variabili di ambiente che renderebbero g ++ il collegamento alle versioni corrette delle librerie.GCC come aggiungere prima il percorso di ricerca del linker predefinito per impostazione predefinita? LIBRARY_PATH non funziona

Ho alcune vecchie librerie di boost in/usr/lib64 (il collegamento con queste non riuscirà) e nuove librerie in/v/users/regel/lib. Quindi il linker dovrebbe collegarsi alle nuove librerie.

Comando:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib 

collegamenti correttamente il programma. Tuttavia, desidero impostare questo come directory di ricerca numero 1 per il linker in modo che non debba specificare '-L' ogni volta che effettuo il collegamento.

le seguenti variabili d'ambiente non sembrano fare il trucco:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system 
/tmp/regel/cc4SmBtI.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

e

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system 
/tmp/regel/ccUreBZy.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

Nonostante la lettura di numerosi articoli e messaggi su argomenti simili, non ho ancora trovato una soluzione.

+0

Hai provato a impostare + esportare il LD_LIBRARY_PATH prima di eseguire g ++ (invece di fornirlo sulla riga di comando g ++)? –

+0

Ho provato ad esportare sia LIBRARY_PATH che LD_LIBRARY_PATH prima di eseguire g ++. – Regel

+0

@FrankSchmitt, impostandolo come ha fatto l'OP ha lo stesso effetto di esportarlo (ma limitato a quel comando e ai suoi figli), quindi non sarà di aiuto –

risposta

6

Come il manuale GCC says, LIBRARY_PATH è la variabile di ambiente corretta per aggiungere le directory al percorso di ricerca della libreria.

Se si aggiunge -v al comando g++ si dovrebbe vedere il LIBRARY_PATH che usa, e si dovrebbe vedere include la directory specificata, e che viene aggiunto al comando collect2 come -L, ma lo vedrete viene aggiunto dopo le directory standard come -L/usr/lib ecc

che non conosco alcun modo per rendere le directory in LIBRARY_PATH vengono prima, io penso che si debba usare -L per questo.

+2

Perché questa è stata la risposta accettata?Non risponde alla domanda. –

-1

Prova a specificare il percorso della libreria in un file .conf in /etc/ld.so.conf.d/

Il linker guarda percorsi specificati nei file in /etc/ld.so.conf.d/ durante il collegamento.

Assicurati di eseguire "ldconfig" una volta creato il file, che lo costringerà ad aggiornare la cache.

+5

Credo che tu stia parlando del loader (ld.so) e non del linker (ld). –

+0

Perché questa risposta è così tanto "ridotta"? Quando sto facendo strace su gcc binary, posso vedere il file /etc/ld.so.conf viene letto (che di solito include ld.so.conf.d/*. Conf). – Kuchara