我遇到与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作为链接器依赖。
答案 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。是的,没有什么是显而易见的,它真的让我工作。