2013-03-07 3 views
14

Vorrei capire questo messaggio di errore se non avessi messo la bandiera -lboost_system, ma in realtà è qui:perché "undefined reference to :: sistema` boost :: generic_category", anche se lo faccio Link contro boost_system

 
g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_system -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary 
build/libmylibrary.a(library.o): In function `__static_initialization_and_destruction_0(int, int)': 
library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()' 
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()' 
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()' 

Hai qualche idea di cosa dovrei investigare per risolvere il problema? (Io uso 4.6.3 gcc)

+9

prova a metterlo alla fine. –

+1

nooo!? **che funzioni ! ! ! ** hai qualche idea del perché? –

+3

È spiegato nella seconda parte di [questa risposta] (http://stackoverflow.com/a/492498/1252091). –

risposta

21

L'ordine in cui si collegano le librerie questioni, nel tuo caso hai library.cpp che utilizza a quanto pare il boost_system biblioteca

library.cpp:(.text+0x25f): undefined reference to `boost::system::generic_category()' 
library.cpp:(.text+0x269): undefined reference to `boost::system::generic_category()' 
library.cpp:(.text+0x273): undefined reference to `boost::system::system_category()' 

Per risolvere questo si dovrebbe spostare la libreria boost_system alla fine della linea di collegamento

g++ -o build/myproject build/main/main.o -L/usr/local/boost/boost_1_52_0/boost/libs -L/usr/lib -Lbuild -L. -lboost_thread -lpthread -lboost_regex -lpq -lmylibrary **-lboost_system** 

in alternativa, costruire libmylibrary.so come una libreria condivisa e il link alla libreria boost_system direttamente.

+4

Salvato la mia vita oggi! – alex88

+0

Salvato due vite! (almeno) –