2009-02-17 16 views
6

sto provando a compilare il mio programma che usa regex su linux. Ho costruito la biblioteca spinta nel libs/regex/costruire digitando make -fgcc.mak che ha creato un gcc directory che contiene i seguenti quattro filecollegamento per aumentare regex in gcc

boost_regex-gcc-1_35 
boost_regex-gcc-d-1_35 
libboost_regex-gcc-1_35.a 
libboost_regex-gcc-d-1_35.a 

Ora voglio usare espressioni regolari dal mio programma che si trova in una directory arbitraria. I #included boost/regex.hpp

Ho ricevuto l'errore che ha dichiarato che regex.hpp non è stato trovato. Poi ho dato l'opzione -I nel compilatore g ++. Non ho ricevuto questo errore. ma ottengo il seguente errore

undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)' 

I googled e ho trovato che ho bisogno di collegare in qualche modo uno dei suddetti 4 librerie per il mio programma. Come posso farlo. Quale dovrei collegare e perché?

risposta

9

Aggiungere libboost_regex-gcc-1_35.a all'elenco di file oggetto nel passaggio collegamento o aggiungere -static -lboost_regex-gcc-1_35 allo stesso. Assicurati inoltre di avere uno switch -I che punta a boost includendo la directory nel tuo passo di compilazione. Se le librerie si trovano al di fuori del percorso di ricerca tipico (/usr/lib su * nix), aggiungere tale directory al comando di collegamento con -Wl,-L/path/to/boost/libs per g++ o semplicemente -L/path/to/boost/libs su ld.

0

Ho anche riscontrato problemi simili durante l'utilizzo del file system boost. Ecco cosa dovevo fare per collegarlo staticamente.

estratto dal mio originale Makefile (problematico): LIBS = -lboost_filesystem -static

Soluzione: LIBS = -Wl, -Bstatic -lboost_filesystem -lboost_system -Wl, -Bdynamic

È possibile visualizzare il Makefile completo da http://code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefile

Necessario aggiungere boost_system per collegarlo correttamente. Aggiunta diretta/specifica di libboost * .a ha creato più problemi. Notare che -Bdynamic è presente per impedire il collegamento statico delle librerie standard.

Problemi correlati