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 ++的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章
cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录