2012-09-25 14 views
7

Sto provando a creare e collegare un progetto basato su C++, cmake con clang (3.0). Questo progetto si collega a diverse librerie che sono installate in una directory personalizzata/mio/dir /. Questa directory è inclusa nelle variabili di ambiente LD_LIBRARY_PATH e LIBRARY_PATH. Il progetto costruisce e si collega bene con g ++.Il linker Clang non esamina LD_LIBRARY_PATH

Il comando link generato ed eseguito da CMake è simile al seguente:

/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib 

ld poi si lamenta con il seguente messaggio:

/usr/bin/ld: cannot find -lmylib 

Il comando link qui sopra funziona bene ogni volta aggiungo manualmente -L/my/dir/ . C'è un modo per collegare senza specificare il flag -L?

+3

['LD_LIBRARY_PATH'] (http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html) è per il caricamento delle librerie all'avvio, non per la risoluzione delle dipendenze dei collegamenti. Forse vuoi usare 'LDFLAGS'? –

+0

Interessante. Io uso __g ++ __ e __clang ++ __ in modo intercambiabile con CMake ma non ho mai avuto un problema simile. Semplicemente uso la macro 'link_directories()' per definire il percorso della libreria. – Hindol

risposta

7

La variabile di ambiente $LD_LIBRARY_PATH (e le sue varie alternative su altre piattaforme UNIX) viene utilizzato in fase di esecuzione , non collegamento tempo, di trovare le librerie.

L'utilizzo di -L è l'approccio corretto e non può essere evitato.

Nota: un approccio migliore sotto Linux (non si specifica la piattaforma in modo da indovinare) è configurare correttamente un file in /etc/ld.so.conf.d/ ed evitare del tutto l'uso di $LD_LIBRARY_PATH.

+1

Nota che ho anche definito la variabile LIBRARY_PATH. Come spiegato in questa domanda http://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path questa variabile è ciò che consente a gcc di trovare le librerie personalizzate. Sto cercando qualcosa di simile per clang. –

+0

@ RégisB. Interessante; Non ho mai usato 'LIBRARY_PATH'. Qual è il problema con l'uso di '-L'? – trojanfoe

+1

L'opzione -L richiede una modifica della configurazione cmake, che è condivisa con i miei colleghi. Ora proverò ad andare in /etc/ld.so.conf.d/ way. –

Problemi correlati