链接Boost python 3.6。无法找到boost_python而不是boost_python3

时间:2017-05-24 09:08:09

标签: python c++ boost linker visual-studio-2017

我遇到与boost python链接的问题。

我正在使用Visual Studio 2017并使用以下命令行编译了boost 1_64包:

b2 -a toolset=msvc-14.1 --build_type=complete stage variant=debugthreading=multi link=shared runtime-link=shared define=_ITERATOR_DEBUG_LEVEL=0 address-model=64

使用此user-config.jam:

using python 
: 3.6                   # Version
: C:\\Python36\\python.exe      # Python Path
: C:\\Python36\\include         # include path
: C:\\Python36\\libs            # lib path(s)
: <define>BOOST_ALL_NO_LIB=1
;

但是在使用运行时库构建我的c ++项目时:多线程DLL(/ MD)我不断收到此错误消息:

Error   LNK1104 cannot open file 'boost_python-vc141-mt-gd-1_64.lib'    

但是我编译的boost库包含以下boost_python文件:

boost_python3-vc141-mt-gd-1_64.dll
boost_python3-vc141-mt-gd-1_64.lib

有人有使用python 3的增强体验吗?经过几个小时的尝试,我无法找到一个好的解决方案。 顺便说一句:将文件重命名为boost_python-(删除3)工作正常。 但我不认为这是正确的方法

VC项目设置:

添加。包含目录:

C:\Python36\include;D:\ws\boost_1_64_0\boost_1_64_0;

添加。 libary目录:

D:\ws\boost_1_64_0\boost_1_64_0\stage\lib;C:\Python36\libs;

已关闭:boost的自动链接功能无法正常使用python 3. boost_module_name宏设置为boost_python(缺少3),生成的库包含3.

- &gt; 关闭自动链接并手动添加所需的库。

解决方案 a)转到boost / python / detail / config.hpp并将BOOST_LIB_NAMe更改为boost_python3而不是boost_python。

解决方案 b)通过定义BOOST_ALL_NO_LIB来转动自动链接,然后显式设置boost_python3 ... lib作为链接器依赖。

3 个答案:

答案 0 :(得分:1)

您提供

boost_python3-vc141-mt-gd-1_64.dll
boost_python3-vc141-mt-gd-1_64.lib

但错误报告缺失

boost_python-vc141-mt-gd-1_64.lib

(发现差异!)

很明显,你的IDE(VS)试图构建一个python,而不是python3扩展。我不知道VS,但必须以某种方式在某处改变它。

答案 1 :(得分:1)

抱歉在这里来晚了,我自己也经历了同样的废话。事实证明,提升并不能很好地处理两个安装(甚至连py3.x本身)

你可以通过<boost/python/detail/config.hpp>进行快速更改来解决这个问题。为了能够使用python 2.x(2.7,可能)和3.x,我建议改变:

#define BOOST_LIB_NAME boost_python

#if PY_MAJOR_VERSION >=3
  #define BOOST_LIB_NAME boost_python3
#else
  #define BOOST_LIB_NAME boost_python
#endif

答案 2 :(得分:0)

我只是想在这里发现,因为这发生在我身上。 Here is the link.可能是你包含2.7 python头而不是3.6。是的,没有什么是显而易见的,它真的让我工作。