2012-01-19 19 views
5

Sto provando a costruire del codice. Ecco l'errore che sto ottenendo:G ++ non riesce a trovare le librerie di boost. Dico che sono in bella vista

main.o: In function `__static_initialization_and_destruction_0': 
/home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()' 

C'è dell'altro, ma non credo sia rilevante.

Ecco il comando build:

directory
g++ -I/home/jmbeck/Downloads/boost_1_48_0 
    -L/home/jmbeck/Downloads/boost_1_48_0/stage/lib 
    -lm 
    -lboost_system 
    -lboost_thread 
    -lboost_regex 
    main.cpp 

Il/home/jmbeck/Download/boost_1_48_0/stadio/lib contiene i file attesi:

libboost_system.a 
[email protected] 
libboost_system.so.1.48.0* 
libboost_thread.a 
[email protected] 
libboost_thread.so.1.48.0* 
libboost_regex.a 
[email protected] 
libboost_regex.so.1.48.0* 
... etc... 

che ho provato la costruzione di un rapido programma che non ha usato le librerie precompilate, e ha compilato bene. Trova le intestazioni appropriate, ma non le librerie.

Cosa sto sbagliando?

+0

È possibile utilizzare l'opzione '-Wall' su' g ++', e si potrebbe usare '-v' per capire cosa sta facendo, e' -H' per capire i file header che ha già trovato. Il tuo errore è un errore di collegamento (libreria mancante o ordine errato). –

+0

Il mio Makefile effettivo usa -Wall e -v (e -Wextra). Volevo arrivare alle basi. Ma questo è un buon consiglio per i futuri spettatori; mi ha aiutato prima. – jmbeck

risposta

6

Provare a mettere le librerie dopo ilmain.cpp.

Ho sperimentato alcune stranezze in passato quando GCC ignora le librerie perché non pensa che vengano utilizzate, prima di raggiungere i miei file sorgente.

+0

Grazie. Questo è stato. Credo di aver aggiornato gcc ad un certo punto nel passato. Questi stessi Makefile funzionavano bene alcuni mesi fa. E 'stato frustrante. Grazie ancora per il suggerimento! – jmbeck

+0

Questo dovrebbe probabilmente essere segnalato come un bug. – Crashworks

1

Spesso i linker richiedono che le librerie siano ordinate come la maggior parte dipendenti dal meno dipendente (credo che MS non lo faccia). In questo caso probabilmente thread o regex dipendono dal sistema, quindi è necessario elencare lo -lsystem dopo l'altra libreria di boost che dipende da esso.

Problemi correlati