【问题标题】:libopencv_calib3d: undefined reference to `std::__throw_out_of_range_fmt(char const*, …)@GLIBCXX_3.4.20'libopencv_calib3d:未定义引用`std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'
【发布时间】:2016-01-19 07:10:13
【问题描述】:

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

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

/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 */

我该如何解决这个问题?

更新

我设法安装了 libgtk2.0-dev 并再次编译 OpenCV。但错误仍然存​​在。

【问题讨论】:

标签: opencv c++ qt


【解决方案1】:

我也有过同样的经历。我假设您使用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 的 Wheezy 版本的 Raspbian。

我在此处的帖子中详细介绍了我在交叉编译 OpenCV 应用程序方面的经验:https://solderspot.wordpress.com/2016/02/04/cross-compiling-for-raspberry-pi-part-ii

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2015-11-26
    • 2019-03-31
    相关资源
    最近更新 更多