使用boost库在Visual Studio 2010中编译完整的静态可执行文件 我试图用MS VisualC++ ++ Express,< /P>编译一个完全独立的静态可执行文件。
我正在使用boost库,它们也使用静态链接编译: b2--工具集=msvc-10.0--链接=静态运行时链接=静态变量=发布线程=多线程 在Visual Studio中,我有以下设置: 概述:MFC使用静态库 VC++目录->包含目录:BOOST文件的路径 C/C++->代码生成:运行库多线程 C/C++->预编译头:不使用 链接器->输入:其他依赖项:所有使用的BOOST LIB文件的完整路径 (C:\boost_1_61_0\stage\lib\libboost_system-vc100-mt-gd-1_61.lib…) 我可以编译动态链接的可执行文件,但如果我尝试静态可执行文件,我会收到以下错误: 1> 链接:致命错误LNK1104:无法打开文件“libboost_system-vc100-mt-sgd-1_61.lib”使用boost库在Visual Studio 2010中编译完整的静态可执行文件 我试图用MS VisualC++ ++ Express,< /P>编译一个完全独立的静态可执行文件。,c++,visual-studio-2010,boost,compilation,executable,C++,Visual Studio 2010,Boost,Compilation,Executable,我正在使用boost库,它们也使用静态链接编译: b2--工具集=msvc-10.0--链接=静态运行时链接=静态变量=发布线程=多线程 在Visual Studio中,我有以下设置: 概述:MFC使用静态库 VC++目录->包含目录:BOOST文件的路径 C/C++->代码生成:运行库多线程 C/C++->预编译头:不使用 链接器->输入:其他依赖项:所有使用的BOOST LIB文件的完整路径 (C:\boost_1_61_0\stage\lib\libboost_system-vc100-m
问题出在哪里?属性不应以
--
作为前缀,因此您的生成命令应类似于:
b2工具集=msvc-10.0链接=静态运行时链接=静态变量=发布线程=多线程
此外,您似乎是在调试模式下构建项目,因此链接器正在寻找boostlibs的调试版本。最好同时构建调试版本和发布版本,这样您就可以在调试和发布模式下构建项目:
b2工具集=msvc-10.0链接=静态运行时链接=静态变量=调试,发布线程=多线程
这将生成每个库的两个版本,“libboost_foo-vc100-mt-s-1_61.lib”和“libboost_foo-vc100-mt-sgd-1_61.lib”。“s”版本是发布库,“sgd”版本是调试库。有关这些字符的确切含义,请参见
编辑:再次查看设置后,看起来您已经手动指定了所使用的所有boost lib的路径。除了我上面提到的构建属性之外,您还应该在
VC++目录->库目录下指定库搜索路径。在VisualStudio中,boost将使用#pragma comment(lib…)
预处理器指令指定它需要哪些库。您可以通过在包含其标题之前定义BOOST\u NO\u LIB
来禁用单个库的此行为,或者通过定义BOOST\u all\u NO\u LIB
来禁用所有库的此行为。对!我想我做对了,但写错了。无论如何,我会再次编译它以确定。我的预处理程序定义现在看起来是这样的:WIN32 NDEBUG(u CONSOLE BOOST)ALL(u nou LIB)pragma comment(LIB,“BOOST_system”)(LIB,“BOOST_regex”)(pragma comment(LIB,“BOOST_date(time)))pragma comment(LIB,“BOOST(serialization”))pragma comment(LIB,“BOOST(thread”)