c++ python交互之boost.p

发布时间:2019-09-02 07:46:23编辑:auto阅读(1605)

    我们做的项目测试代码用的是python,但是由于开发用的代码是c++,所以很多交互的地方是需要python调用c++的代码。为此我们将c++的函数打包成.so文件被调用。在实际项目中会遇到各种类型的应用,项目组的郭松同学做了比较详细的总结。我将之收集成文,记录如下,便于自己以后翻阅,也为自己博客添砖加瓦,感谢的话就不说了,如果有朋友因为这篇文章受益,请感谢小松同学。
    1.普通函数转换
    C++代码: src.cpp

    #include <iostream>
    #include <string>
    using namespace std;

    /************************************************ simple method *************************************/
    char const* testA()
    {
    return "just a test";
    }

    string testB(string str)
    {
    cout << str << endl;
    return str;
    }

    void testC(string str,int num)
    {
    cout << "str is : " << str << endl;
    cout << "int is : " << num << endl;
    }
    python 转换代码: src4py.cpp
    #include <boost/python.hpp>
    #include "src.cpp"
    using namespace boost::python;
    BOOST_PYTHON_MODULE(test) //test是python中模块名字
    {
    def("a", testA);//将testA映射为a 函数
    def("b", testB);
    def("c", testC);
    }
    Makefile文件
    因为是第一篇将makefile也展示一下,后面文章将不记录Makefile,因为都一样。/usr/local/boost_143/include/是事先必须准备的库文件。
    all:test.so
    rm -rf src.o src4py.o
    rm -rf cass_pack_factory_src.o cass_pack_Factorysrc4py.o

    test.so:src.o src4py.o
    g++ src4py.o -o test.so -shared -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/ -L /usr/local/python/lib/python2.5/ -L
    /usr/local/boost_143/lib/ -lboost_python
    src.o:
    g++ -c src.cpp -o src.o
    src4py.o:src.o
    g++ -c src4py.cpp -o src4py.o -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/

    clean:
    rm -rf src.o src4py.o
    rm -rf test.so
    python 调用代码:test.py
    import test

    test.a()
    test.b("just a test!")
    test.c("call me string!",7)

关键字