Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
C++ boost自动链接是如何做出选择的?_C++_Visual Studio 2012_Boost - Fatal编程技术网

C++ boost自动链接是如何做出选择的?

C++ boost自动链接是如何做出选择的?,c++,visual-studio-2012,boost,C++,Visual Studio 2012,Boost,当我使用VisualStudio2012时,通过自动链接,我不需要手动添加boost/POCO/python库,它们将自动添加。 如果我错过了任何图书馆,我会得到这样的信息: 链接:致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-1_55.lib' 但它如何知道我要链接哪个文件?也许我想要动态链接,使用boost_system-vs110-mt-1_55.lib,或者我想要一个名为gd或sgd的 它如何做出选择 问题是,我的程序正在寻找libboost\u

当我使用VisualStudio2012时,通过自动链接,我不需要手动添加boost/POCO/python库,它们将自动添加。 如果我错过了任何图书馆,我会得到这样的信息:

链接:致命错误LNK1104:无法打开文件'libboost_system-vc110-mt-1_55.lib'

但它如何知道我要链接哪个文件?也许我想要动态链接,使用boost_system-vs110-mt-1_55.lib,或者我想要一个名为gd或sgd的

它如何做出选择


问题是,我的程序正在寻找libboost\ux。。。(即静态)库,当搜索系统、线程等时,但它需要python的boost(即动态),我不明白为什么?

Visual Studio允许源代码中的
\pragma
指令设置链接器选项。对于“自动链接”,Boost将这些
#pragma的
与现有宏结合使用


特别是,听起来您正在寻找
BOOST\u ALL\u DYN\u LINK
宏。

如果您所说的“自动链接”指的是使用DLL,那么您也不能从链接.libs中解脱出来。为了在运行时使用DLL,您需要在编译时知道这些DLL的内容,这就是.lib文件发挥作用的地方。关于哪个版本、运行时和mt/md(您正在编译什么类型的运行时模块,您可以在VS的项目选项中看到它),您应该首先检查您的项目以确定。是的,我知道如何自己做出选择,使用MinGW编译该项目我没有问题。但是VisualStudio自己做选择,所以我不能选择,它为我做选择。我想知道为什么它会做出这样的选择。我的问题是-Visual Studio如何做出选择以及我如何管理它?您也可以从VS控制它,查看链接时包含的.libs的链接器->输入窗格以及链接器->常规->附加链接目录(IIRC)是的,我可以这样做,但这并不能解决我的问题。我需要下一个要加载的boost库列表:系统、线程、文件系统、日期时间、python。VisualStudio使用自动链接,希望系统、线程、文件系统、日期和时间-作为静态的,在$(BOOST\u ROOT)/stage/lib中找到它,并且工作得很好。但它也需要动态的boost\u python\u…,我没有,也不想构建。如果我在Linker->Input菜单libboost_python(静态版本)中添加,它仍然没有自动为我选择的库(即致命错误LNK 1104:无法打开文件“boost_python…”)。您是如何配置项目的?克马克?在这种情况下,如果VS想要一个动态库,这可能意味着某些东西正在使用它到您的代码中,正如我从boost/system/config.hpp了解到的,如果没有定义boost\u ALL\u DYN\u LINK,那么我必须将所有库链接为静态库,这现在适用于除python之外的所有库。我真的希望将所有库链接为静态库,所以这个标志正是我所需要的,并且默认宏已经足够好了。但即使我手动添加它(BOOST\u ALL\u STATIC\u LINK),它也不起作用。不知怎的,我的编译器认为boost.python不能是静态的。即使存在BOOST\u ALL\u STATIC\u链接,它也会请求动态python库。我不知道该去哪里解决这个问题。@Arkady:试着具体一点,使用
BOOST\u PYTHON\u STATIC\u LIB