2012-06-28 21 views
16

Ho cercato in alto e in basso per rispondere a questo problema. Sto usando boost 1.48 e il programma è estremamente semplice, dal momento che l'ho scomposto nella sua forma più semplice per risolvere questo problema.g ++ riferimento indefinito a `boost :: system :: system_category() '

#include <boost/filesystem.hpp> 

int main(int argc, char **argv) { 
    return 0; 
} 

Il g ++ comando eseguito dal mio Makefile è la seguente:

g++ -m32 -Wall -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system mapnik-test.cpp 

L'elenco completo degli errori durante il collegamento è la seguente:

/tmp/ccIbmuee.o: In function `__static_initialization_and_destruction_0(int, int)': 
mapnik-test.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()' 
mapnik-test.cpp:(.text+0x53): undefined reference to `boost::system::generic_category()' 
mapnik-test.cpp:(.text+0x5d): undefined reference to `boost::system::system_category()' 
collect2: ld returned 1 exit status 
make: *** [mapnik-test] Error 1 

ho trovato molte persone che soffrono di lo stesso problema, ma nella maggior parte dei casi, la soluzione è stata quella di fornire la libreria boost_system in LDFLAGS. Come puoi vedere dalla riga di comando g ++, ho già specificato questo. Ho persino provato a collegare esplicitamente alla libreria libboost_system.a senza alcun risultato. Sono l'unica persona con questa lamentela?

risposta

27

Inserire il file di origine all'inizio della riga di comando.

Prova

g++ -m32 -Wall mapnik-test.cpp -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system 

Le librerie devono essere specificati solo dopo che il file di origine in modo che il linker può risolvere i riferimenti non definiti nel file di origine.

Problemi correlati