Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用boost库在Visual Studio 2010中编译完整的静态可执行文件 我试图用MS VisualC++ ++ Express,< /P>编译一个完全独立的静态可执行文件。_C++_Visual Studio 2010_Boost_Compilation_Executable - Fatal编程技术网

使用boost库在Visual Studio 2010中编译完整的静态可执行文件 我试图用MS VisualC++ ++ Express,< /P>编译一个完全独立的静态可执行文件。

使用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

我正在使用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”


问题出在哪里?

属性不应以
--
作为前缀,因此您的生成命令应类似于:

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”)