我有静态或动态增强库吗?

时间:2011-01-06 20:56:10

标签: c++ boost

我跑了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

的错误

我哪里错了?

5 个答案:

答案 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

在那里你可以找到所有字母的含义以及如何相应地构建提升......