2010-10-14 6 views
6

Ich arbeite an einem C++ - Projekt, in dem ich die Serialisierungsbibliotheken von Boost verwenden möchte. Ich habe die neuesten Boost-Bibliotheken von der Homepage von Boost heruntergeladen und installiert.Hilfe kompilieren und Verwenden von Boost C++ - Bibliotheken

Als ich versuchte, die eine Anhebung des Demo-Serialisierung Beispiele zu kompilieren und ausführen, habe ich alle möglichen Fehler, die so aussah:

/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&)': 

Ich bin neu in C++ und steigern so wäre jede Hilfe geschätzt .

Dank

+0

@ user475505 Linkfehler. Überprüfen Sie, ob Sie die Bibliotheken zum Verknüpfen hinzugefügt haben. – yadab

Antwort

5

Vielen Dank für Ihre Hilfe. Ich habe mein Problem endlich gelöst, obwohl meine Lösung ziemlich anti-climactic und wahrscheinlich nicht so informativ ist.

Ich hatte versucht, die Boost-Bibliotheken manuell zu installieren, indem ich sie direkt von der Boost-Website heruntergeladen habe und festgestellt habe, dass alle Bibliotheken in/usr/local/lib und/usr/local/include/boost/installiert wurden. Nachdem ich wiederholt auf meine ursprünglichen Fehler gestoßen war, entschied ich mich zu prüfen, ob der Synaptic Package Manager die Boost-Bibliotheken "besser" installieren konnte. Ich habe 'libboost1.40-all-dev' ausgewählt, um alles zu installieren, aber trotzdem funktionierte nichts.

Schließlich beschloss ich, neu zu starten, löschte so manuell das boost/-Verzeichnis in/usr/local/include und löschte alle libboost-Dateien in/usr/local/lib. Ich habe dann alle Boost-Bibliotheken für die vollständige Entfernung markiert, um alles zu entfernen. Nachdem alle Boost-Bibliotheken deinstalliert waren, ging ich zurück zum Synaptic Package Manager, wählte 'libboost1.40-all-dev' noch einmal.

Ich bin mir nicht sicher, was genau geändert wurde, wenn ich die Bibliotheken erneut installierte, aber alles begann wieder zu arbeiten. Getestet habe ich zuerst von der Kommandozeile, und versuchte, die demo.cpp von Boost Website ein weiteres Mal mit dem folgenden Befehl zu kompilieren:

g++ demo.cpp -lboost_serialization 

und sofort zusammengestellt. Beim Ausführen der ausführbaren Datei wurden genau die Ergebnisse angezeigt, nach denen ich gesucht habe. Außerdem habe ich die Datei wieder in mein Eclipse-Projekt verschoben, den Linker-Bibliotheken 'boost_serialization' hinzugefügt und versucht, das Projekt zu erstellen. Alles funktionierte wieder perfekt, da ich das Projekt erstellen und den Beispielcode ausführen konnte.

Ich habe nicht wirklich eine Erklärung dafür, warum dies mein Problem behoben, aber für alle anderen ähnliche Probleme, der beste Rat, den ich geben kann, ist, die Boost-Bibliotheken nicht direkt zu installieren, sondern den Synaptic Package Manager handhaben alles.

Nochmals vielen Dank, Sie waren sehr hilfreich.

1

Sie müssen Boost.Serialization Bibliothek verknüpfen. Sehen Sie, wie der Boost beginnt page.

12

Vermutlich müssen Sie eine Verbindung zur Serialisierungsbibliothek herstellen. Werfen Sie einen Blick in /usr/lib für etwas mit einem ähnlichen Namen wie libboost_serialization. Dann sagen g++ (man nicht sagen, welcher Compiler Sie verwenden) Sie verwenden möchten (Link zu) diese Bibliothek:

g++ main.cpp -lboost_serialization

D.h. Wenn der Name der Bibliothek /usr/lib/libboost_serialization.a ist, lassen Sie die ursprüngliche lib und die Erweiterung aus.

Viel Glück!

+0

Danke für die schnellen Antworten, ich habe immer noch Probleme, aber ich denke, dass ich zumindest auf dem richtigen Weg bin. Ich habe vergessen, im ursprünglichen Beitrag zu erwähnen, dass ich das Eclipse CDT für die Entwicklung verwende. Ich denke, dass Sie beide Recht hatten, da es ein Linker-Problem war. Nachdem ich ein wenig mehr gesucht hatte, fand ich einen Artikel über das Einrichten von Boost in Eclipse, wo ich boost_serialization im Bibliotheksfeld der Linker-Einstellungen hinzufügen musste. Danach bekomme ich immer noch die gleichen Fehler. Gibt es noch mehr Tipps, wie ich Boost mit Eclipse aufbauen kann? Danke – Swaraj

+0

Versuchen Sie zu sehen, welche Kommandozeilenparameter Ecplips an g ++ übergibt. Stellen Sie dann sicher, dass der Verknüpfungsteil korrekt ist (Sie können versuchen, den Befehl außerhalb von Eplipse auszuführen). Poste es hier, wenn du nicht weiterkommst. –

+0

Ich habe immer noch Probleme, hier ist der Link-Befehl, den Eclipse verwendet: "g ++ -o" Testbench "./demo.o -lboost_serialization" Ich bekomme den gleichen Fehler von der Kommandozeile außerhalb von Eclipse. Vielen Dank für Ihre Hilfe – Swaraj