使用增强.python包装python的c++类,导入modu时报告错误

2024-10-02 10:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我用c++编写了一个opencv库。然后用增强.python. 但无法从生成的共享库导入此模块。(PS.我在C++中构建C++项目,运行良好) 错误信息列表如下:


root@boris-GL553VD:~/workspace/feature_matching/src# python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from libfeatMatch  import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./libfeatMatch.so: undefined symbol: _ZN2cv14findHomographyERKNS_11_InputArrayES2_idRKNS_12_OutputArrayEid
>>>

错误消息show libopencv\u calib3d.so无法正确链接。
我使用LDD命令显示featMatch模块的所有链接库。列出的库没有libopencv\u calib3d.so!!!你知道吗


root@boris-GL553VD:~/workspace/feature_matching/src# ldd libfeatMatch.so | grep opencv
    libopencv_core.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4 (0x00007fa218076000)
    libopencv_imgproc.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4 (0x00007fa217beb000)
    libopencv_highgui.so.3.2 => /usr/local/lib/libopencv_highgui.so.3.2 (0x00007fa2179da000)
    libopencv_imgcodecs.so.3.2 => /usr/local/lib/libopencv_imgcodecs.so.3.2 (0x00007fa2174a1000)
    libopencv_xfeatures2d.so.3.2 => /usr/local/lib/libopencv_xfeatures2d.so.3.2 (0x00007fa216fd7000)
    libopencv_features2d.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_features2d.so.2.4 (0x00007fa216d3a000)
    libopencv_imgproc.so.3.2 => /usr/local/lib/libopencv_imgproc.so.3.2 (0x00007fa210954000)
    libopencv_core.so.3.2 => /usr/local/lib/libopencv_core.so.3.2 (0x00007fa20f5bd000)
    libopencv_features2d.so.3.2 => /usr/local/lib/libopencv_features2d.so.3.2 (0x00007fa20e296000)
    libopencv_flann.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_flann.so.2.4 (0x00007fa20e02d000)
    libopencv_flann.so.3.2 => /usr/local/lib/libopencv_flann.so.3.2 (0x00007fa2088ec000)

我的makefile是:


INCLUDE_FLAGS = \
    -I/usr/include/python2.7 -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2

LIB_PATH = \
    -L/usr/lib/x86_64-linux-gnu -L/usr/local/lib

LIB_FLAGS = \
    -lpython2.7 -lboost_python -lboost_python-py27 -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_xfeatures2d -lopencv_features2d -lopencv_calib3d  

SOURCE = \
    ./json/jsoncpp.cpp ./utils.cpp ./feature_matching.cpp 

all:${SOURCE}
    g++ ${INCLUDE_FLAGS} -fPIC ${SOURCE} -std=c++11 -shared -o libfeatMatch.so ${LIB_PATH} ${LIB_FLAGS} 
clean:
    rm -f libfeatMatch *.o *.out *.so

C++项目文件列表如下:


class FeatureMatching
    {
    public:

      explicit FeatureMatching(const char* img_obj_name, const char* img_scn_name,
                      const FeatureMatchingOptions& feat_match_opts, const bool js_flag = true);
      explicit FeatureMatching(const Rect& rect_obj, const char* img_scn_name,
                      const FeatureMatchingOptions& feat_match_opts, const bool js_flag = true);

       ~FeatureMatching();

      bool process();

      ....
     }

using namespace boost::python;
BOOST_PYTHON_MODULE(libfeatMatch)
{

    class_<FeatureMatchingOptions>("FeatureMatchingOptions")
        .def(init<const FeatureMatchingOptions &>())
    ;

    class_<FeatureMatching>("FeatureMatching", init<const char*, const char*, const FeatureMatchingOptions&, const bool>())
        .def(init<const Rect&, const char*, const FeatureMatchingOptions&, const bool>())
        .def("process", &FeatureMatching::process)
    ;
}   


Tags: coregnusolinuxlibusrlocalx86

热门问题