Python.Boost 学习笔记1

Python.Boost是让Python能够更直接自由的调用C++函数和类的库。这个库的产生是为了提高Python的效率。这里这个笔记介绍如何使用这样一个强大的工具。

安装指南

笔者使用homebrew管理包,之前使用homebrew安装了2.7.9版本的Python(这使得后面出现了cmake错误,后面再说)。首先安装boost库

brew install boost

接着安装Python.Boost

brew install boost-python

这里笔者安装的为1.59.0版本的boost和对应的Python.Boost

Hello World

首先介绍如何写一个Python.Boost的Hello World。在代码中我们使用C++实现一个返回字符串 "hello, world" 的函数并将其添加到模块中,C++函数如下:

char const* greet() {
    return "hello, world"
}

我们希望将其转化为Python能调用的包,这里我们要使用Boost.Python的功能,将greet函数定义为python能够调用的函数

#include 
#include 
BOOST_PYTHON_MODULE(hello) {
    using namespace boost::python;
    def("greet", greet);
};

这里应该是用到了Boost.Python中定义的宏来进行转化,具体内容以后会仔细研读。
之后就是编译的需要,这里使用cmake,没有采用boost的bjam,具体是因为对于bjam还不熟,cmake比较熟悉一点。

cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)

上面会自动需找所需要的一些包,然后可以添加子目录,比如我们将上面的hello.cpp放在hello-world目录下,我们就添加如下子目录

ADD_SUBDIRECTORY(hello-world)

hello-world目录下我们插入如下cmake命令

PYTHON_ADD_MODULE(hello hello.cpp)

这样按照平常的cmake习惯进行配置编译即可

brew管理下的特殊命令

如果之前使用brew安装过Python并且使用brew管理boost库,可能会出现在使用Python调用自己所写的类的时候出现错误,这是因为cmake找到的Python库为系统自带的库而非brew编译的库,这时候需要在cmake的时候加入指定Python的命令,以2.7为例:

cmake -DPYTHON_LIBRARY=/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib

后面在如平常加入路径

备注

  • 需要注意cpp文件中BOOST_PYTHON_MODULE后面的名字需要和cmake中的PYTHON_ADD_MODULE保持一直,否则会报init函数的错误
  • 不知道为什么如果不include的时候会报错。

你可能感兴趣的:(Python.Boost 学习笔记1)