libopencv_calib3d:未定义的对'std::__throw_out_of_range_fmt(char const*, ...)的引用@GLIBCXX_3.4.20'
libopencv_calib3d: undefined reference to `std::__throw_out_of_range_fmt(char const*, …)@GLIBCXX_3.4.20'
我参考这个在我的Raspberry Pi 2上安装OpenCV(它运行在内核版本4.1.7-v7的最新Raspbian上)。由于依赖错误,我无法安装libgtk2.0-dev,但我能够安装OpenCV而没有任何错误。
我试图交叉编译一些简单的OpenCV代码在Qt为我的树莓派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 */
如何解决这个问题?
我设法安装libgtk2.0-dev并再次编译OpenCV。
我也有过同样的经历。我假设你正在使用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。
希望这是一些帮助。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- 如何在构造函数中传递 const 引用时强制编译器不接受右值
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 对临时对象的Const引用不会延长其生存期
- 对 const 引用参数使用默认值会导致崩溃
- 在运算符重载中使用带有 const 引用的 friend 函数
- C++通过 const 引用传递时不调用派生类函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 为什么要返回对小类成员的 const 引用?
- C - 最好将枚举类作为值或const引用
- RVO:返回由值传递的值,即使显式分配给 const 引用也是如此
- const引用与可变成员的对象
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- 对类成员而不是 getter 的 Const 引用
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- STD ::配对的const引用如何工作
- 为什么我的C 函数拒绝返回const引用