Opencv 'undefined reference to `cv::namedWindow....'(链接错误)



我使用下面的CMake文件来构建一个opencv项目,使用命令 CMake ,然后是make

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完成得很好,但是make给出了以下错误:

CMakeFiles/t.dir/t.cpp。0:在函数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。错误2:***[所有]错误2

我试着运行以下命令

g++ t.cpp美元(pkg-config——libs opencv cflags)

但是得到以下错误

/home/keiths/tmp/ccWFcaXH。0:在函数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,我是一个有限的用户(非root),我在本地安装了(最新的)g++/gcc版本。我得到了pkg-config命令的正确库列表,并配置了库路径以及到本地opencv文件夹的PATH

只是添加一个非常重要的点,我尝试编译相同的代码,同时显式指定通用的g++编译器(/usr/bin/g++),一切都很顺利。因此,问题似乎是与我的本地g++编译器在'/home/keith/lbin'。然而,我需要这个最新版本的c++11功能(旧版本是4.4.7,Sysadmin需要很长时间才能升级它)

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

最新更新