2015-10-20 318 views
4

我參考this在我的Raspberry Pi 2上安裝OpenCV(它運行在內核版本爲4.1的最新Raspbian上。 7-V7)。由於依賴性錯誤,我無法安裝libgtk2.0-dev,但是我能夠安裝OpenCV而沒有任何錯誤。libopencv_calib3d:未定義的引用'std :: __ throw_out_of_range_fmt(char const *,...)@ GLIBCXX_3.4.20'

我試圖交叉編譯Qt中一些簡單的OpenCV的代碼爲我的樹莓派2。但我正在逐漸連接階段以下錯誤:

/usr/local/lib/libopencv_calib3d.so: undefined reference to 
std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20 

我的代碼是:

myFunc { 
    VideoCapture cap(0); 
    if (!cap.isOpened()) { 
     qDebug() << "Cannot open the video cam"; 
     return; 
    } 

    double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); 
    double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); 
    qDebug() << "Frame size : " << dWidth << " x " << dHeight; 
    namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); 

    while (1) { 
     Mat frame; 
     bool bSuccess = cap.read(frame); 

     if (!bSuccess) { 
      qDebug() << "Cannot read a frame from video stream"; 
      break; 
     } 

     imshow("MyVideo", frame); 

     if (/*condition*/) { 
      break; 
     } 
    } 
} 

我試着改變庫鏈接的順序。但錯誤仍然存​​在。我.pro文件中查找此:

QT  += core gui quick xml widgets 
TARGET = myApp 
TEMPLATE = app 

    QMAKE_CXXFLAGS += -I/mnt/rasp-pi-rootfs/usr/include \ 
         -I/mnt/rasp-pi-rootfs/usr/include/libxml2 \ 
         -I/mnt/rasp-pi-rootfs/usr/include/glib-2.0/glib \ 
         -I/mnt/rasp-pi-rootfs/usr/include/glib-2.0 \ 
         -I/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/glib-2.0 \ 
         -I/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/glib-2.0/include \ 
         -I/mnt/rasp-pi-rootfs/usr/include/gstreamer-1.0 \ 
         -I/mnt/rasp-pi-rootfs/usr/local/include \ 

    QMAKE_CXXFLAGS += -Wno-psabi 

    QMAKE_LIBDIR_FLAGS += -L/mnt/rasp-pi-rootfs/usr/lib \ 
          -L/mnt/rasp-pi-rootfs/lib \ 
          -L/mnt/rasp-pi-rootfs/usr/local/lib \ 

    QMAKE_LFLAGS += -lgmodule-2.0 \ 
         -lz \ 
         -lxml2 \ 
         -lgthread-2.0 \ 
         -lrt \ 
         -lglib-2.0 \ 
         -lpthread \ 
         -lgstreamer-1.0 \ 
         -lgobject-2.0 \ 
         -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ts -lopencv_video \ 

SOURCES += /* all .cpp files */ 

HEADERS += /* all .h files */ 

我怎樣才能解決這個問題?

UPDATE

我設法安裝libgtk2.0-dev的和重新編譯的OpenCV。但錯誤依然存在。

+0

您是否曾嘗試安裝[libgtk2.0-dev](https://packages.debian.org/wheezy/libgtk2.0-dev)的依賴關係? – agold

回答

4

我有過相同的經歷。我假設你正在使用https://github.com/raspberrypi/tools作爲你的工具鏈,但即使你不是問題,無論你使用的工具鏈可能早於gcc/g ++ 4.9。

問題是Jessie(即Raspbian 4.1.X)使用gcc/g ++ 4.9作爲它的工具鏈,而OpenCV正在使用該編譯器版本新增的STL特性。因此,如果您的應用程序使用早於gcc/g ++ 4.9的工具鏈構建,它將不會鏈接。

解決的辦法是得到一個至少爲4.9或更高的工具鏈,或者堅持使用gcc 4.6的Raspbian的Wheezy版本。

我詳細介紹了我在一篇文章中交叉編譯OpenCV應用程序的經驗:https://solderspot.wordpress.com/2016/02/04/cross-compiling-for-raspberry-pi-part-ii

希望它有一些幫助。

相關問題