C++ 我有静态或动态boost库吗?

C++ 我有静态或动态boost库吗?,c++,boost,C++,Boost,我已经运行了bjam.exe--build dir=“C:\build boost”--build type=minimal msvc stage 例如,现在我有了带有这些标题的libraries.lib libboost_serialization-vc100-mt libboost_serialization-vc100-mt-1_45 libboost_serialization-vc100-mt-gd libboost_serialization-vc100-mt-gd-1_45 我相

我已经运行了
bjam.exe--build dir=“C:\build boost”--build type=minimal msvc stage

例如,现在我有了带有这些标题的libraries.lib

libboost_serialization-vc100-mt
libboost_serialization-vc100-mt-1_45
libboost_serialization-vc100-mt-gd
libboost_serialization-vc100-mt-gd-1_45
我相信这些应该是用于调试和发布版本的静态库。当我使用
多线程调试(/MTd)
运行编译器时,它给出了一个错误
LNK1104:无法打开文件'libboost\u serialization-vc100-mt-sgd-1_45.lib'
它正在寻找一个使用
-sgd


我哪里出错了?

您有动态版本。静态的以名称中的“s”分隔。确保在
bjam
命令行上指定了
link=static
。如果没有,则必须重新生成以生成静态版本。

请参阅第6.3节“命名和维护”


对于静态库,其中应该有一个s,例如-sgd,这样就有了动态库

libboost_序列化-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

令人困惑的是,使用MSVC构建boost有两个“静态”选项

B2.exe使用选项
link=static
,它告诉boost您希望静态链接它。如果您使用/MT或/MTd编译VC项目,您还需要使用
runtime link=static
选项告知boost您将静态链接到VC运行库

第二个
runtime link=static
将-s放在.lib名称中

我构建boost的命令行是

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

请检查此文档:


在那里,您可以找到所有字母的含义,以及如何相应地构建boost…

它是否会在最后给我任何
.dll
?我只在stage文件夹中找到了
.libs
。@snoz:那你找错文件夹了。在Windows框中,LIB被视为构建构件,当每个库的编译完成时,这些构件将被复制到输出文件夹中。您必须找到包含DLL和LIB的目录所在的位置。我不认为它应该是“egd”,它应该是“sgd”或只是“s”。也许您可以尝试使用“-build type=complete”构建,因为这将构建库的所有受支持的变体。请参阅“5.3.4调用bjam”一节“在这个问题上我遇到了很多麻烦,但是有很多不同的依赖关系,不仅仅是boost。我想你刚刚让它为我点击了!(3年后)。