python - 为 python 包装 c++ 类(使用 opencv),给出 "undefined symbol"

标签 python c++ opencv wrapper

背景: 我正在尝试包装一个 c++ 类,以便我可以从 python 中使用它。但是,一旦我使用 opencv 中的任何内容(例如:“cv::Mat frame;”,我就会收到“ undefined symbol ”错误。一旦我删除了“cv::VideoCapture wcam;”这一行,所有内容都会编译并执行应该。

我做错了什么?

网络摄像头.cpp:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
using namespace std;


class webcam{
    private:
        cv::VideoCapture wcam;
    public:
        webcam();
        void nextFrame();
        //cv::Mat getNewFrame();
};


webcam::webcam(){}
void webcam::nextFrame(){
    std::cout << "TESTING TESTING";
}


extern "C" {
    webcam* webcam_new(){ return new webcam(); }
    void test(webcam* wc) {wc->nextFrame();}
    //void Foo_bar(Foo* camCon){ foo->bar(); }
}

编译:

g++ -c -fPIC webcam.cpp -o webcam.o -lopencv_core -lopencv_highgui
g++ -shared -Wl,-soname,webcam.so -o webcam.so  webcam.o

摄像头.py:

import cv2
import numpy as np

from ctypes import cdll
lib = cdll.LoadLibrary('./webcam.so')

class camCon(object):
    def __init__(self):
        self.obj = lib.webcam_new()
     def test(self):
        lib.test(self.obj)

fooo = camCon()
fooo.test()

错误输出:

Traceback (most recent call last):
  File "wrapp.py", line 5, in <module>
    lib = cdll.LoadLibrary('./webcam.so')
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./webcam.so: undefined symbol: _ZN2cv12VideoCaptureC1Ev

(我知道可以直接在python中使用openCV)

更新

我发现使用 “简历::垫框架” 可以。但 “cv::VideoCapture 网络摄像头” 不是。

谢谢!

最佳答案

已解决:

在为共享库编译时,我必须像这样添加库:

g++ -shared -Wl,-soname,webcam.so -o webcam.so  webcam.o -lopencv_core -lopencv_highgui -lopencv_imgproc

关于python - 为 python 包装 c++ 类(使用 opencv),给出 "undefined symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420818/

相关文章:

python - pyparsing 中的 python 列表(嵌套)解析器是什么样的?

Python Django/with Microsoft Graphs - 我不断收到值错误 "state missing from auth_code_flow"

python - Selenium - 很难在页面上找到输入元素(Python)

Java - 在 OpenCV 中读取帧

python - 使用 python 从图像集中提取 hog 特征时出错

python - 具有随机像素颜色的 100x100 图像

c++ - 通过2层方法传递shared_ptr?

c++ - 数组放置的析构函数 new

c++ - 边界矩形碰撞测试?

android - 错误 : cannot find symbol variable GL_TEXTURE_EXTERNAL_OES + OpenCV on Android Studio