2010-10-14 134 views
6

我正在開發一個C++項目,我想使用boost的序列化庫。我從boost的主頁下載並安裝了最新的boost庫。幫助編譯和使用boost C++庫

當我試圖編譯和運行的升壓轉換器的演示序列化的例子之一,我得到了這個樣子各種錯誤:

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

我新的C++和促進所以任何幫助,將不勝感激。

謝謝

+0

@ user475505鏈接器錯誤。檢查你是否添加了鏈接庫。 – yadab 2010-10-14 08:39:13

回答

5

謝謝大家的一切幫助。我終於解決了我的問題,儘管我的解決方案相當反高潮,並且可能沒有那麼豐富。

我試圖手動安裝boost庫,直接從boost的網站上下載它們,發現所有庫都安裝在/ usr/local/lib和/ usr/local/include/boost /中。在重複運行我的原始錯誤之後,我決定查看Synaptic Package Manager是否可以做一個更好的安裝boost庫的工作。我選擇了'libboost1.40-all-dev'來安裝所有東西,但仍然沒有任何工作。

最後,我決定重新開始,以便手動刪除/ usr/local/include中的boost /目錄,並且刪除了/ usr/local/lib中的所有libboost文件。然後,我標記了所有的boost庫以完全刪除以刪除所有內容。一旦所有的boost庫被卸載,我就回到Synaptic Package Manager,再次選擇'libboost1.40-all-dev'。

我不確定當我重新安裝庫時究竟發生了什麼變化,但是一切都開始重新起作用。我首先在命令行測試,並試圖編譯從升壓轉換器的多個網站一次的demo.cpp用下面的命令:

g++ demo.cpp -lboost_serialization 

並立即編譯。運行可執行文件顯示了我正在尋找的結果。此外,我將文件移回到我的Eclipse項目中,將「boost_serialization」添加到鏈接程序庫,並嘗試構建項目。一切都很完美,因爲我可以構建項目並運行示例代碼。

我沒有真正解釋爲什麼這解決了我的問題,但對於遇到類似問題的任何人,我可以給出的最佳建議是不直接安裝boost庫,而是讓Synaptic Package Manager處理一切。

再次感謝大家,你一直非常有幫助。

1

您需要鏈接到Boost.Serialization庫。看到Boost的入門page

12

推測你需要鏈接到序列化庫。看看/usr/lib的名稱與libboost_serialization類似。然後告訴g++(你沒有說你正在使用的編譯器)要使用(鏈接)這個庫:

g++ main.cpp -lboost_serialization

即如果庫的名稱是/usr/lib/libboost_serialization.a,則省略了最初的lib和擴展名。

祝你好運!

+0

感謝您的快速回復,我仍然遇到一些麻煩,但我認爲我至少要走在正確的軌道上。我忘了在原文中提到我正在使用Eclipse CDT進行開發。我認爲你是對的,因爲它是一個鏈接器問題,所以經過多次搜索後,我發現了一篇關於在eclipse中設置boost的文章,我必須在鏈接器設置的庫字段下添加boost_serialization。做完這些之後,我仍然得到相同的錯誤。有關如何使用Eclipse設置提升的更多建議?謝謝 – Swaraj 2010-10-14 11:08:42

+0

嘗試查看Ecplips傳遞給g ++的命令行參數。然後確保鏈接部分是正確的(您可以嘗試在Ecplipse之外運行命令)。如果你沒有前進,請將它張貼在這裏。 – 2010-10-14 11:46:49

+0

我仍然遇到問題,這裏是Eclipse正在使用的鏈接命令:「g ++ -o」Testbench「./demo.o -lboost_serialization」我從Eclipse之外的命令行中獲得相同的錯誤。感謝您的幫助到目前爲止 – Swaraj 2010-10-14 16:31:40