2009-11-26 112 views
6

我下載了Launchy的源代碼,並試圖在Visual Studio 2005中構建它。Launchy項目使用VC7構建,因此我必須將項目文件更新爲VC8,並且該過程似乎進行得很順利。然而,Launchy也使用Boost 1.33.1庫,我創建的是Boost 1.41.0 libs(爲了使更新的庫更容易構建而支持Boost),所以我還更新了項目以指向我的新增強庫安裝。現在,我得到下面的連接錯誤:Boost lib鏈接器錯誤Visual C++

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib' 

我曾在升壓lib目錄下,我能找到最匹配一看...

libboost_regex-vc80-mt-gd-1_41.lib 

通知失蹤的「。我不明白libs中的區別是什麼,以及Visual Studio是否正在尋找錯誤的東西,或者我的Boost構建過程無法構建正確的庫。任何人都可以指引我走向正確的方向嗎?

作爲一個實驗,我製作了一個正則表達式庫的副本,並將其重命名爲鏈接程序正在查找的內容。這給了我鏈接錯誤約已經在MSVCRTD.LIB定義的符號,如下面的一個長長的清單:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in libcmtd.lib(typinfo.obj) 

我會嘗試建立了Boost 1.33.1庫,並在這一點上我Launchy項目文件代替。但我仍然想知道我的Boost 1.41.0庫有什麼問題。

編輯:我發現了一個參考in the Boost docs的「S」庫是什麼:

Use this library when linking statically to the C++ standard library and compiler runtime support libraries.

所以它看起來像「S」庫是正確的。現在我只需要弄清楚如何構建它們。

解決方案:我能夠用下面的命令行構建遺漏的boost庫。

bjam --build-type=complete msvc stage 

我運行後,已經運行boostrap.bat在提升生活的地方。

+0

如果你不想搞砸他們,你可以在這裏得到他們: http://boost.teeks99.com – teeks99 2009-11-27 15:33:03

回答

10

區別是clearly described in Boost docs - 「mt-sgd」表示「使用調試符號調試靜態鏈接的運行時庫,多線程」。 「mt-gd」是相同的,但使用動態鏈接的運行時庫(即msvcrtd.lib而不是libcmtd.lib)。

要麼更改項目設置以使用動態CRT鏈接(即/ MDd而不是/ MTd),要麼使用靜態鏈接構建Boost - 混合這些將無法正常工作。

3

你用什麼命令來建立提升?嘗試指定build-type = complete。通常它也應該建立庫。

+0

我會試試,謝謝。我想我沒有指定構建類型而構建它。 – Parappa 2009-11-26 20:23:22

+0

它正在工作!再次感謝。 – Parappa 2009-11-26 20:24:32

+0

它對我不起作用。 S庫不會被構建。 boost 1.54 – Max 2013-10-24 10:36:44