簡體   English   中英

包裝用於python的c ++類(使用opencv),給出“未定義的符號”

[英]Wrapping c++ class for python (with opencv), gives “undefined symbol”

背景:我正在嘗試包裝c ++類,以便可以從python使用它。 但是,一旦我從opencv中使用了任何東西(例如:“ cv :: Mat frame;”,我就會收到“未定義符號”錯誤。當我刪除行“ cv :: VideoCapture wcam;”時,所有內容都會編譯並執行應該。

我究竟做錯了什么?

webcam.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

cam.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 :: Mat框架”是可以的。 但不是“ cv :: VideoCapture網絡攝像頭”。

謝謝!

我知道這很愚蠢,我想添加評論,但是我的代表很糟糕。

無論如何,由於您已經在using namespace cv指令,您是否嘗試僅刪除cv::部分?

另外我不確定cvcv2如何cv2相似? 我不太確定他們是否是同一個人。

解決了:

為共享庫進行編譯時,我必須添加如下庫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM