使用boost库在Visual Studio 2010中编译完整的静态可执行文件

时间:2016-05-31 07:30:28

标签: c++ visual-studio-2010 boost compilation executable

我试图使用MS Visual C ++ - Express编译完整的独立静态可执行文件。

我使用了boost库,它们也是用静态链接编译的:

  

b2 --toolset = msvc-10.0 --link = static runtime-link = static variant = release threading = multi

在Visual Studio中,我有以下设置:

  

常规:MFC使用静态库

     

VC ++目录 - >包括目录:提升文件的途径

     

C / C ++ - >代码生成:运行时库Muthithreaded

     

C / C ++ - >预编译标题:不要使用

     

链接器>输入:附加依赖项:所有使用的BOOST LIB文件的完整路径        (C:\ boost_1_61_0 \阶段\ lib中\ libboost_system-VC100-MT-GD-1_61.lib ....)

我可以编译动态链接的可执行文件,但如果我尝试静态可执行文件,则会收到此错误:

  

1> LINK:致命错误LNK1104:无法打开文件' libboost_system-vc100-mt-sgd-1_61.lib'

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

属性不应以--为前缀,因此您的构建命令应如下所示:

  

b2 toolset = msvc-10.0 link = static runtime-link = static variant = release threading = multi

此外,您似乎在调试模式下构建项目,因此链接器正在寻找boost库的调试版本。构建调试版和发布版可能是个好主意,这样您就可以在调试和发布模式下构建项目:

  

b2 toolset = msvc-10.0 link = static runtime-link = static variant = debug,release threading = multi

这将生成每个库的两个版本,'libboost_foo-vc100-mt-s-1_61.lib'和'libboost_foo-vc100-mt-sgd-1_61.lib'。 's'版本是发行版lib,'sgd'版本是调试库。请参阅boost docs,了解每个字符的确切含义。

编辑:再次查看您的设置后,看起来您已手动指定了您正在使用的所有提升库的路径。除了我上面提到的有关构建属性的内容之外,您还应在VC++ Directories -> Library Directories下指定库搜索路径。在Visual Studio中,boost将使用#pragma comment(lib, ...)预处理程序指令指定所需的库。您可以通过在包含其标头之前定义BOOST_<lib>_NO_LIB或通过定义BOOST_ALL_NO_LIB来定义所有库来禁用单个库的此行为。