VS LINK 无法打开文件'boost_python...'而不是 libboost_python3-vc140-mt-gd-1_65



今天早上我安装了Python 3.6,得到了我的b2配置来编译boost lib,并且在lib路径中确实有两种libboost_python3...风格。然后用一个简单的:

#include "stdafx.h"
#include <boost/python.hpp>
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}

我收到链接器错误:

LINK : fatal error LNK1104: cannot open file 'boost_python-vc140-mt-gd-1_63.lib'

我搜索过像USING_BOOST_PYTHON3这样的标志,但我读到的每件事都说它应该是自动的。该 Boost 应该根据我构建的内容包含适当的库。

这家伙有同样的问题,但从未得到答案。这与我能找到的右侧"类似问题"中的链接非常接近。但我看不出 VS 是如何成为其中的一部分,因为提升会选择库。

更新:我刚刚发现:

#if PY_MAJOR_VERSION == 2
#  define BOOST_LIB_NAME boost_python
#elif PY_MAJOR_VERSION == 3
#  define BOOST_LIB_NAME boost_python3
#endif

所以现在看起来为什么我的主要版本是 2 而不是 3?即使我:

#define PY_MAJOR_VERSION 3

就在我stdafx.h的顶部,它仍然与python 2库链接。 !?

另一个更新: 所以很早,我没有"安装"python 2.7,我已经将附加库设置为C:cppPython27libs我只是将其设置为C:cppPython36_3libs,现在我得到:

LINK : fatal error LNK1104: cannot open file 'python27.lib'

这是有道理的,因为boost试图链接到2.x而不是3.x

虽然我脑子里有这一切......

使用您正在使用的任何 python 包含路径进行提升检查。为什么不呢,因为您可能想要使用 2.7 或 3.6。所以蟒蛇包含必须在Additional Include Directories中设置。我把我的设置为 2.7,然后忘记了,我的错。我想通了,PY_MAJOR_VERSION是Python定义的。

我仍然有链接问题,我现在只想链接静态,但是 Boost Python 将强制动态链接 boost,无论用户选项如何。但那篇帖子解决了它。

然后我仍然没有libboost_python3-vc140-mt-sgd-1_65.lib,我只是做了一个b2 .. --build-type=complete install来确定。我仍然打开了控制台,所以我查找了列表并构建了 python-s!出于某种原因,b2 创建了一个文件夹,C:Boostlib,仅用于静态链接的 python 库。所有其他库都降落在C:cppboost_1_65_0stagelib

这是一次多么冒险啊!

#define BOOST_PYTHON_STATIC_LIB 

链接: libboost_python3-VC140-mt-s-1_65_1.lib