OpenCV“对'cv :: imread'等C ++的未定义引用

Posted

技术标签:

【中文标题】OpenCV“对\'cv :: imread\'等C ++的未定义引用【英文标题】:OpenCV "Undefined reference to 'cv::imread' etc C++OpenCV“对'cv :: imread'等C ++的未定义引用 【发布时间】:2016-08-25 20:51:28 【问题描述】:

所以我编写了一些非常基本的 OpenCV C++ 代码来测试它的功能。我在 Linux Ubuntu 16.04 上使用 CodeBlocks。我已经正确安装了 OpenCV,我认为,Codeblocks 在制作项目时提供了“OpenCV Project”作为选项,每当我开始输入 OpenCV 关键字时,它都会扩展并建议关键字。

我的问题是,当我尝试构建它时,我得到了

undefined reference to `cv::imread(std::__cxxll::basic_string<char, std::char_traits<ch..

它对每个 opencv 函数重复此操作。

我在某处读到这可能与存档文件有关,因此我会在输入时提供结果:

pkg-config opencv --libs

进入终端。输出是:

-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core 
-lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui 
-lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree 
-lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching 
-lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -latomic 
-ltbb -lGL -lGLU -lrt -lpthread -lm -ldl

那么我该如何解决这个问题呢?我应该以某种方式编辑我的文件吗?

提前非常感谢

【问题讨论】:

它看起来像一个链接器错误。您是否向 codeblock projet 提供了任何 opencv 库? 【参考方案1】:

您的代码已使用标准库使用 std::__cxx11 命名空间进行编译。即,您可能正在使用 g++ 5+,它与以前的版本具有不同的 ABI。您安装的 opencv 库可能是较旧的 ABI,因此不兼容。

您可以自己编译 opencv 库,使用与您拥有的库的 ABI 匹配的早期编译器,或者将编译器配置为使用旧 ABI。

如果您使用的是 g++ 5,则可以使用宏 _GLIBCXX_USE_CXX11_ABI。在包含和 std 库之前:

#define _GLIBCXX_USE_CXX11_ABI 0

【讨论】:

以上是关于OpenCV“对'cv :: imread'等C ++的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV实战——OpenCV与图像处理

cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

opencv相机标定

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

如何使用opencv实现图像匹配

OpenCV 简介 携手走进 OpenCV 的世界