windows+python3+boost +vs2015 实现C++与python的混合编程

申明:本人仅在以下条件下进行测试,其他的环境或者版本并未做更多测试。

为什么写这个博客?

 本人由于近期需要用到C++和python的混合编程,需要在python里面调用C++,要用到boost.python库,奈何网上都是基于python2的教程,没有python3的。由于python2和python3的不兼容,因此python3不能直接使用python2的库(已测试,确实会出错),经过多番探索,最终解决该问题,希望发表出来能给其他人带来便利。

好,下面上干货。

1.测试条件

windows7 64位

python3.5

VS2015 (V140版本)

boost 1.66.0 

2.准备工作

 说明:boost官网的第三方lib文件是针对Python2的,没有python3,因此我们需要下载源码用python3进行编译生成。

 

  1. python3的下载安装,只说一点,记得把python3添加到系统路径,一般安装时会默认添加。
  2. boost的下载。

 进入官网http://www.boost.org/,选择最新的版本,这里是1.66.0版本,如下图所示。

 

 windows+python3+boost +vs2015 实现C++与python的混合编程_第1张图片

 点击进入

 

 

 windows+python3+boost +vs2015 实现C++与python的混合编程_第2张图片

 我选择的是.ZIP的,下载即可。

下载完成之后,解压,我放到D盘。路径为:D:\boost_1_66_0。

下面进入非常关键的编译环节。

 3.boost的编译

 编译的过程我参考的这篇博文http://blog.csdn.net/lianbus/article/details/46230357,下面再进行详细说明一下。

 (1)首先,查看VS的版本,方法如下:

 右键-->属性 即可。

 可以看出,我的VS2015是V140的,记住这个140这个数字。

 windows+python3+boost +vs2015 实现C++与python的混合编程_第3张图片

(2)从开始菜单打开 VS的命令提示符。

 windows+python3+boost +vs2015 实现C++与python的混合编程_第4张图片

(3)从终端进入boost库所在目录,如D: \boost_1_66_0。

(4)运行bootstrap.bat生产64位的bjam.exe,这个bjam将用于后续的编译过程。

 

 步骤(3)和(4)操作如下:

 windows+python3+boost +vs2015 实现C++与python的混合编程_第5张图片

 bjam.exe将用于之后的lib文件的产生,进入boost目录即可查看文件是否生成成功。

 windows+python3+boost +vs2015 实现C++与python的混合编程_第6张图片

 (5) 进行编译,生成lib文件。

 是否还记得前面我的VS2015的版本是V140,下面代码里msvc-14.0中14.0就是我的版本号,根据自己的情况进行更改。编译又有两种方式,静态的(static)和动态的(shared)。动态的库配置需要复制对应的dll到python目录下,这里不做讲解,仅讲解动态库的配置。

继续在窗口里输入

静态的库:

直接输入,bjam toolset=msvc-14.0 --with-python threading=multi link=static address-model=64。

(说明:--with-python 里面的python需要是python3版本,要求系统能找到你的python,直接在cmd里面输入python能弹出python3说明没有问题

编译完成如下:

 windows+python3+boost +vs2015 实现C++与python的混合编程_第7张图片

 

 在boost目录下会生成stage文件夹,里面的lib就是C++所需的python3的lib文件。可以将Lib复制出来,放到指定的文件夹,我这里是将static的库放到新建的lib_static文件夹下,将用于后续的配置。

 

 

3.VS 工程配置和编译

1. 分别包含boost 和python3对应的include和lib.

(1)配置包含目录

(2) 配置库目录

 

2.代码设置和编译成dll

(1)由于使用的是静态库,首先需要在你的c++文件前加上下面这句(我是放到头文件的):

#define BOOST_PYTHON_STATIC_LIB

(2)并在头文件中并包含和命名空间。

#include

using namespace boost;

using namespace boost::python;

(3)封装类和函数。

 void ReconstructionData::hello()
 {
cout << "hello, this is my example!" << endl;
 }

 void ReconstructionData::print()
 {
 cout << "print!" << endl;
 }

 

BOOST_PYTHON_MODULE(mysample)

 {

       class_("ReconstructionData")

               .def("hello",&ReconstructionData::hello)

               .def("print",&ReconstructionData::print);  //注意以分号结尾

}

 其中 mysample 是模块的名字,CLassName是类名,helloprint是类的成员函数名。在Python里面调用就简单了,和通常的库调用方式是一样的。

(4)编译成dll

 打开 工程属性 —> 配置属性 —> 常规,在右侧的 项目默认值—> 配置类型中选择“动态库(.dll)”,这将使 VS 生成 dll 动态库文件,而非 exe 可执行文件。

 windows+python3+boost +vs2015 实现C++与python的混合编程_第8张图片

 选择 生成 —> 生成解决方案。生成 .dll文件后,将名字改为mysample,后缀名改为pyd。将该文件复制到Python 的库目录下(python —>lib —>site-packages),然后 从python中Import进去就OK啦。

 

4.python3测试

 cmd进入python,import mysample库。

 申明一个对象:s=mysample.ReconstructionData()

 s.hello()

 windows+python3+boost +vs2015 实现C++与python的混合编程_第9张图片

 到此处,终于大功告成!

 

你可能感兴趣的:(编程,人工智能,python,C++)