Sto classificando i file C e C++ per una classe e questo compito utilizza la libreria GSL. Poiché non ho il permesso di root sul mio computer, la mia libreria GSL è installata nella mia home directory, e quindi devo dire a compilatori e linker dove trovarla.Dire a ld dove cercare le directory tramite una variabile di ambiente
Questo non è un problema quando scrivo un programma da solo, perché aggiungo semplicemente i flag -L e -I appropriati a gcc.
Ma quando compilo i file degli studenti, non voglio modificare tutti i loro makefile. Invece, voglio mettere le directory appropriate in una variabile d'ambiente, in modo che avvenga senza problemi.
A tal fine, ho esportato le seguenti variabili con la biblioteca o includono posizioni: C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, LIBRARY_PATH e LD_LIBRARY_PATH
Ma quando compilo il progetto di uno studente, con
gcc -Wall -o MC_thread MC_thread.c -lgsl -lgslcblas -lpthread -lm
Viene visualizzato il seguente errore:
/usr/bin/ld: cannot find -lgsl
collect2: ld returned 1 exit status
make: *** [all] Error 1
Sto utilizzando gcc v 4.1.2. In realtà non ottengo l'errore se uso gcc v 4.4, ma non ne ho idea. Il mio linker è:
ld -V
GNU ld version 2.17.50.0.6-12.el5 20061020.
Prova man ld e man ld.so per i vars ambientali che usano. LD_LIBRARY_PATH potrebbe funzionare. – Eugene
Penso che LD_LIBRARY_PATH sia usato solo da ld.so, non da ld. Poiché si tratta di un errore in fase di compilazione, non di un errore in fase di esecuzione, vorrei concentrarsi sul motivo per cui LIBRARY_PATH non funziona. Due cose che verificherei, , il file della libreria ha il nome corretto ed è LIBRARY_PATH in realtà definito nell'ambiente di esecuzione gcc? –
Prova a eseguire gcc con l'opzione '-v' e pubblica il richiamo completo di ld dall'output. –