ocr

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

2019-12-19  本文已影响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!

复杂例子看(二)

上一篇下一篇

猜你喜欢

热点阅读