Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误)

Posted

技术标签:

【中文标题】Opencv \'未定义的对 `cv::namedWindow....\' 的引用(链接错误)【英文标题】:Opencv 'undefined reference to `cv::namedWindow....' (linking error)Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误) 【发布时间】:2015-12-08 14:09:18 【问题描述】:

我正在使用以下 CMake 文件来构建一个 opencv 项目,使用命令 cmake 后跟 ma​​ke

cmake_minimum_required(VERSION 2.8)
project(t)
#set(CMAKE_MODULE_PATH $CMAKE_MODULE_PATH /home/keiths/opencv/opencv-2.4.11_build/build)
SET(CMAKE_C_COMPILER mpicc)
SET(CMAKE_CXX_COMPILER mpicxx)
#set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
include_directories($OpenCV_INCLUDE_DIRS)

find_package(OpenCV REQUIRED)
find_package(MPI REQUIRED)

add_executable(t t.cpp)
target_link_libraries(t $OpenCV_LIBS $OpenCV_LIBRARIES opencv_core opencv_highgui opencv_calib3d opencv_contrib opencv_core opencv_features2d opencv_flann opencv_gpu opencv_highgui opencv_imgproc opencv_legacy opencv_ml opencv_nonfree opencv_objdetect opencv_ocl opencv_photo opencv_stitching opencv_superres opencv_ts opencv_video opencv_videostab rt pthread m dl) 

MESSAGE($OpenCV_LIBS)
MESSAGE($OpenCV_INCLUDE_DIRS)

cmake 可以正常完成,但 ma​​ke 给了我以下错误:

CMakeFiles/t.dir/t.cpp.o: 在函数main': t.cpp:(.text+0x56): undefined reference to cv::namedWindow(std::__cxx11::basic_string, std::allocator > const&, int)' collect2: 错误:ld 返回 1 退出状态 make[2]: * [t] 错误 1 ​​make[1]: * [CMakeFiles/t.dir/all] 错误 2 make: *** [all] 错误 2

我试过运行以下命令

g++ t.cpp $(pkg-config --libs opencv --cflags)

但出现以下错误

/home/keiths/tmp/ccWFcaXH.o: 在函数main': t.cpp:(.text+0x56): undefined reference to cv::namedWindow(std::__cxx11::basic_string, std::allocator > const&, int)' collect2: 错误:ld 返回 1 个退出状态

我正在运行以下简单代码

#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
//#include <mpi.h>

 using namespace cv;

 int main(int argc, char **argv)     
      Mat image;
      namedWindow( "Display window", WINDOW_AUTOSIZE );
      return 0;
  

我尝试了尽可能多的建议,但均未成功。平台是 CentOS,我是本地安装(更新)版本的 g++/gcc 的受限用户(非 root)。我得到了 pkg-config 命令的正确库列表,并配置了库路径以及本地 opencv 文件夹的路径

只是为了补充一个非常重要的一点,我尝试编译相同的代码,同时明确指定股票 g++ 编译器 (/usr/bin/g++),一切顺利。因此,问题似乎出在“/home/keiths/lbin”的本地 g++ 编译器上。我需要这个最新版本,但是对于 c++11 功能(旧版本是 4.4.7,系统管理员需要很长时间才能升级它)

【问题讨论】:

【参考方案1】:

在构建最新的 g++ 之前,我使用旧的 g++ 编译器(在系统 bin 文件夹中)构建了我的 OpenCV 库。使用新的 g++ 编译器重建 OpenCV 库为我做了这件事。出于好奇,我尝试使用旧编译器构建 OpenCV 示例,它返回了许多“未定义的引用”行,但我很乐意交换问题,因为我不需要它!

【讨论】:

以上是关于Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到:“未定义的对 `glfwInit' 的引用”?

尝试使用 -pg [Termux] 时出现“未定义的对 `mcount' 的引用”

看到未定义的对“CollidingMice 的 vtable”的引用

如何解决在开发 C++ 中未定义的对 readimagefile 的引用错误 [重复]

未定义的对静态constexpr char []的引用

这些'未定义的对 __glut*WithExit' OpenGL 链接器错误的引用是啥意思? [复制]