首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libopencv_calib3d:对`std::__throw_out_of_range_fmt( const*,…)的未定义引用@GLIBCXX_3.4.20的

libopencv_calib3d:对`std::__throw_out_of_range_fmt( const*,…)的未定义引用@GLIBCXX_3.4.20的
EN

Stack Overflow用户
提问于 2015-10-20 14:42:30
回答 1查看 10.8K关注 0票数 7

我提到在我的Raspberry 2上安装了OpenCV (它运行在最新的Raspbian上,内核版本为4.1.7-v7)。由于依赖关系错误,我无法安装libgtk2.0dev,但我能够安装OpenCV而没有任何错误。

我正在尝试为我的Raspberry Pi 2交叉编译Qt中的一些简单的OpenCV代码。但是在链接器阶段我得到了以下错误:

代码语言:javascript
复制
/usr/local/lib/libopencv_calib3d.so: undefined reference to
std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20

我的代码是:

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
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 */

我怎么解决这个问题?

更新

我成功地安装了libgtk2.0dev并再次编译了OpenCV。但错误依然存在。

EN

回答 1

Stack Overflow用户

发布于 2016-02-10 22:53:50

我也有过同样的经历。我假设您使用https://github.com/raspberrypi/tools作为您的工具链,但即使您不是,问题是您使用的工具链可能早于gcc/g++ 4.9。

问题是Jessie (即Raspbian4.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

希望能有所帮助。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33239805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档