我跑了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
我哪里错了?
答案 0 :(得分:23)
有些令人困惑的事情是,有两个“静态”选项用于构建使用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
答案 1 :(得分:4)
您拥有动态版本。静态名称由名称中的“s”分隔。确保在link=static
命令行上指定了bjam
。如果没有,你将不得不重建以制作静态版本。
答案 2 :(得分:2)
请参阅Boost getting started windows第6.3节命名和section 6.1 on Unix naming
对于静态库,应该有一个s,例如-sgd所以你有动态库
答案 3 :(得分:2)
这是我如何分解
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
答案 4 :(得分:1)
请查看此文件: http://www.boost.org/doc/libs/1_45_0/more/getting_started/windows.html#library-naming
在那里你可以找到所有字母的含义以及如何相应地构建提升......