美文网首页ocr
python调用c++ so库· pybind11(一)

python调用c++ so库· pybind11(一)

作者: 夕一啊 | 来源:发表于2019-12-19 19:52 被阅读0次

    ocr中,为了加快后处理速度,常常使用c++来写模块被python调用,比如EAST中的lanms,psenet中的pse过程,还有pan的后处理。它们都选择了pybind11。

    开发环境

    简单打印例子

    just_print.cpp c++ 11 语法

    #include "pybind11/pybind11.h"
    #include "pybind11/numpy.h"
    #include "pybind11/stl.h"
    #include "pybind11/stl_bind.h"
    
    namespace py = pybind11;
    
    namespace cpp_print{
    
        void cpp_print()
        {
            std::cout<<"this is cpp function!"<<std::endl;
        }
     }
    
    PYBIND11_MODULE(just_print, m){  //这里写cpp文件名
        m.def("cpp_print", &cpp_print::cpp_print, " just print something"); // namespace名::函数名
    } 
    

    Makefile

    CXXFLAGS = -I include  -std=c++11 -O3 $(shell python3-config --cflags)
    LDFLAGS = $(shell python3-config --ldflags)
    
    CXX_SOURCES = just_print.cpp
    
    LIB_SO = just_print.so
    
    $(LIB_SO): $(CXX_SOURCES) $(DEPS)
        $(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $(CXX_SOURCES) --shared -fPIC
    
    clean:
        rm -rf $(LIB_SO)
    
    

    make,如果报错“g++: error: unrecognized command line option ‘-fno-plt’
    ”就复制打印的一长串,把-fno-plt去掉手动编译。
    编译成功就有just_print.so文件

    在python里调用

    python
    >>> from just_print import cpp_print
    >>> cpp_print()
    this is cpp function!
    
    

    复杂例子看(二)

    相关文章

      网友评论

        本文标题:python调用c++ so库· pybind11(一)

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