Python.Boost 学习笔记1

作者: fromradio | 来源:发表于2016-06-29 09:58 被阅读896次

    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 <boost/python/mudule.hpp>
    #include <boost/python/def.hpp>
    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<sstream>的时候会报错。

    相关文章

      网友评论

        本文标题:Python.Boost 学习笔记1

        本文链接:https://www.haomeiwen.com/subject/rfxxjttx.html