2010-10-14 11 views
6

Sto lavorando a un progetto C++ in cui mi piacerebbe utilizzare le librerie di serializzazione di boost. Ho scaricato e installato le ultime librerie di boost dalla home page di boost.Contribuire alla compilazione e all'uso delle librerie boost C++

Quando ho provato a compilare ed eseguire quello di esempi demo di serializzazione di spinta, ho avuto tutti i tipi di errori che si presentava così:

/usr/local/include/boost/archive/detail/iserializer.hpp:173: undefined reference to `boost::archive::archive_exception::~archive_exception()' 
./demo.o: In function `void boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive>::save_standard::invoke<bus_schedule::trip_info>(boost::archive::text_oarchive&, bus_schedule::trip_info const&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:253: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)' 
./demo.o: In function `void boost::archive::save_access::end_preamble<boost::archive::text_oarchive>(boost::archive::text_oarchive&)': 
/usr/local/include/boost/archive/detail/oserializer.hpp:83: undefined reference to `boost::archive::detail::basic_oarchive::end_preamble()' 
./demo.o: In function `void boost::archive::detail::load_pointer_type<boost::archive::text_iarchive>::invoke<bus_route*>(boost::archive::text_iarchive&, bus_route*&)': 
/usr/local/include/boost/archive/detail/iserializer.hpp:518: undefined reference to `boost::archive::detail::basic_iarchive::load_pointer(void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&))' 
./demo.o: In function `void boost::archive::detail::save_pointer_type<boost::archive::text_oarchive>::non_polymorphic::save<bus_route>(boost::archive::text_oarchive&, bus_route&)': 

Sono nuovo di C++ e aumentare quindi ogni aiuto sarebbe apprezzato .

Grazie

+0

errore utente @ link475505. controlla se hai aggiunto le librerie per il collegamento. – yadab

risposta

5

Grazie a tutti per il vostro aiuto. Finalmente ho risolto il mio problema, anche se la mia soluzione è abbastanza anti-climatica, e probabilmente non così informativa.

Avevo provato a installare manualmente le librerie di boost scaricandole direttamente dal sito Web di boost e ho scoperto che tutte le librerie erano state installate in/usr/local/lib e/usr/local/include/boost /. Dopo aver ripetutamente eseguito i miei errori originali, ho deciso di vedere se il gestore di pacchetti Synaptic poteva fare un lavoro "migliore" di installazione delle librerie di boost. Ho selezionato 'libboost1.40-all-dev' per installare tutto, ma ancora non funzionava.

Infine, ho deciso di ricominciare da zero, quindi ho cancellato manualmente la cartella boost/in/usr/local/include, e ho cancellato tutti i file libboost in/usr/local/lib. Ho quindi contrassegnato tutte le librerie di boost per la rimozione completa per rimuovere tutto. Una volta disinstallate tutte le librerie di boost, sono tornato al gestore di pacchetti Synaptic, selezionato 'libboost1.40-all-dev' ancora una volta.

Non sono sicuro di cosa sia cambiato esattamente quando ho reinstallato nuovamente le librerie, ma tutto ha ripreso a funzionare. Ho provato dalla riga di comando, e ho cercato di compilare il demo.cpp dal di spinta sito ancora una volta con il seguente comando:

g++ demo.cpp -lboost_serialization 

e compilato immediatamente. L'esecuzione dell'eseguibile mostrava esattamente i risultati che stavo cercando. Inoltre, ho spostato il file nel mio progetto Eclipse, aggiunto "boost_serialization" alle librerie Linker e ho provato a creare il progetto. Tutto ha funzionato perfettamente di nuovo, poiché ho potuto creare il progetto ed eseguire il codice di esempio.

Non ho davvero una spiegazione per spiegare perché questo ha risolto il mio problema, ma per chiunque abbia problemi simili, il consiglio migliore che posso dare è NON installare direttamente le librerie di boost, ma piuttosto gestire il Gestore pacchetti Synaptic qualunque cosa.

Grazie ancora a tutti, sei stato estremamente utile.

1

È necessario collegare alla libreria Boost.Serialization. Guarda come inizia il Boost page.

12

Presumibilmente è necessario collegarsi alla libreria di serializzazione. Dai un'occhiata a /usr/lib per qualcosa con un nome simile a libboost_serialization. Poi dire g++ (non ha detto quale compilatore si sta utilizzando) che si desidera utilizzare (link) questa libreria:

g++ main.cpp -lboost_serialization

Vale a dire se il nome della libreria è /usr/lib/libboost_serialization.a, si omette lo lib iniziale e l'estensione.

Buona fortuna!

+0

Grazie per le risposte veloci, ho ancora qualche problema, ma penso di essere almeno sulla buona strada. Ho dimenticato di menzionare nel post originale che sto usando Eclipse CDT per lo sviluppo. Penso che tu avessi entrambi ragione nel fatto che si trattava di un problema di linker, quindi dopo aver cercato un po 'di più, ho trovato un articolo sull'impostazione di boost in eclipse in cui dovevo aggiungere boost_serialization sotto il campo della libreria delle impostazioni del linker. Dopo aver fatto questo, ho ancora gli stessi errori. Qualche consiglio in più su come posso impostare boost con Eclipse? Grazie – Swaraj

+0

Prova a vedere quali parametri della riga di comando Ecplip passa a g ++. Quindi assicurati che la parte di collegamento sia corretta (puoi provare a eseguire il comando al di fuori di Ecplipse). Pubblicalo qui se non vai avanti. –

+0

Ho ancora problemi, ecco il comando di collegamento utilizzato da Eclipse: "g ++ -o" Testbench "./demo.o -lboost_serialization" Ricevo lo stesso errore dalla riga di comando all'esterno di Eclipse. Grazie per il tuo aiuto fino ad ora – Swaraj

Problemi correlati