2009-10-13 58 views
1

我想嘗試一下我正在開發的一個項目的Boost :: Serialization庫。我也習慣在Linux中習慣編程。我在默認位置設置了提升。我試着用他們提供的命令行參數編譯他們提供的測試文件here,它工作正常。在這個例子中他們使用.a文件。如何知道在鏈接到Boost時何時使用.a或.so?

然後我去了序列化頁面,並嘗試運行其中一個serialization demos。我運行基本相同的命令,除了換出文件名並鏈接到libboost_serialization.a而不是libboost_regex.a,但我得到了一堆錯誤。在玩完不同的選項並重新檢查目錄後,我終於通過用.so文件替換.a文件來實現它。

僅供參考,最終什麼工作對我來說是這樣的:

g++ /usr/local/lib/libboost_serialization.so sertest.cpp -o sertest 

怎麼來聯繫我對某文件一個例子,在其他的我不得不反對。所以鏈接?

+1

不應該使用'-l'選項,也許使用'-L'作爲庫搜索路徑,而不是直接在命令行中指定庫? – 2009-10-13 18:49:04

+0

在給出的例子中,他們使用 $ C++ -I path/to/boost_1_40_0 example.cpp -o example \ 〜/ boost/stage/lib/libboost_regex-gcc34 -mt -d-1_36.a 所以我做了同樣的。 – Alex 2009-10-13 18:55:10

回答

4

因爲靜態鏈接時,指定庫和對象文件的順序很重要。具體來說,必須在使用使用其中的符號的對象文件之後提及庫。

+0

啊,謝謝,那一定是導致我問題的原因。 – Alex 2009-10-16 00:39:53

相關問題