簡體   English   中英

我有靜態或動態增強庫嗎?

[英]Do i have static or dynamic boost libraries?

我運行了bjam.exe --build-dir="C:\\build-boost" --build-type=minimal msvc stage

現在我有了帶有這些頭文件的庫.lib

libboost_serialization-vc100-mt
libboost_serialization-vc100-mt-1_45
libboost_serialization-vc100-mt-gd
libboost_serialization-vc100-mt-gd-1_45

我相信這些應該是用於調試和發布版本的靜態庫。 當我使用Multi-threaded Debug (/MTd)運行編譯器時,它會出現錯誤LNK1104: cannot open file 'libboost_serialization-vc100-mt-sgd-1_45.lib'它正在尋找帶有-sgd

我哪里錯了?

令人困惑的是,有兩個“靜態”選項用於使用MSVC構建增強功能。

B2.exe采用link=static選項,告訴你要靜態鏈接IT。 如果要使用/ MT或/ MTd編譯VC項目,還需要使用runtime-link=static選項來告訴boost您將靜態鏈接到VC運行時庫。

它是第二個runtime-link=static ,它將-s放在.lib名稱中。

我建設助推器的命令行是

b2.exe --toolset=msvc variant=release link=static threading=multi runtime-link=static stage

你有動態版本。 靜態名稱由名稱中的“s”分隔。 確保在bjam命令行上指定了link=static 如果沒有,您將不得不重建以生成靜態版本。

這是我如何分解它

libboost_serialization-VC100-MT-SGD-1_45.lib

lib- if boost library starts with lib then its a static library , shared library do not start with lib prefix. Also static library will have a '-s' in the name.

mt- multi-threaded , obtained by specifying threading=multi when you ran bjam or b2.This is the default threading.

g- use debug libraries for building the code
d- build a debug version of your code

因此,當您使用/ MTd(使用LIBCMTD.lib創建調試多線程可執行文件)時,您的編譯器正在搜索多線程靜態調試庫(mt-sgd)。 我猜默認情況下它必須搜索靜態庫。 如果需要動態庫,請在代碼中插入這些行或定義宏

#define BOOST_ALL_DYN_LINK

有關Unix命名的信息,請參閱Boost入門窗口部分6.3命名和第6.1節

對於靜態庫,應該有例如-sgd,所以你有動態庫

請查看此文檔: http//www.boost.org/doc/libs/1_45_0/more/getting_started/windows.html#library-naming

在那里你可以找到所有字母的含義以及如何相應地構建增強...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM