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

时间:2017-07-14 21:31:35

标签: python-3.x boost

今天早上我安装了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应该包含适当的lib。

This guy有同样的问题但从未得到答案。这就像我可以看到“类似问题”中的链接一样接近。在右边。但我无法看到VS如何成为其中的一部分,因为助推器会选择lib。

更新:我刚刚找到:

#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 lib链接。 !?

又一次更新: 那么早,我没有安装python 2.7&#39;,我已将附加库设置为C:\cpp\Python27\libs我只需将其设置为C:\cpp\Python36_3\libs,现在我得到:

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

有意义,因为助推试图链接到2.x而不是3.x

2 个答案:

答案 0 :(得分:0)

虽然我把这一切都放在脑海里........

使用您正在使用的任何python包含路径来增强检查。为什么不这样做,因为你可能想要使用2.7或3.6。因此必须在Additional Include Directories中设置python include。我将我的设置为2.7而忘记了,我的不好。我认为PY_MAJOR_VERSION是Python定义的。

我仍然有链接问题,我只想暂时链接静态,但是 Boost Python will force dynamic linking of boost, regardless of user options。但那篇文章修复了它。

然后我仍然没有libboost_python3-vc140-mt-sgd-1_65.lib而我刚刚完成b2 .. --build-type=complete install以确定。我仍然打开控制台,所以我查看了列表并提升了python-s!无论如何b2创建了一个文件夹C:\Boost\lib,仅用于静态链接的python库。所有其他的lib都登陆C:\cpp\boost_1_65_0\stage\lib

这是多么冒险!

答案 1 :(得分:0)

#define BOOST_PYTHON_STATIC_LIB 

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