今天早上我安装了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
答案 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