2017-06-03 70 views
1

前段时间我安装了OpenCV 2.4.12,大约2天前安装了OpenCV 3.2。在我完成安装程序(this是我所遵循的指南)后,我的旧openCV代码会一直告诉我在编译它时找不到cv函数。显然是一个链接器错误。后来我意识到我应该使用2.4版本,所以我删除了我的主目录中的opencv-3.2.0文件夹,并再次在我的2.4.12文件夹中运行sudo make install。这似乎工作,但再次无法找到简历功能。OpenCV重装问题

所以这是我自己到目前为止发现的。

我在CMakeLists.txt中打印了一些变量,而我的OpenCV_INCLUDE_DIRS指向/ usr/include/opencv/usr/include,这显然是问题所在。但是现在我该如何解决它?我试图手动设置该变量使用此线

集($ {OpenCV_INCLUDE_DIRS}的/ usr /包括/ OpenCV的/)

但同样,也没有用。

这里是我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) 
project(DisplayImage) 
find_package(OpenCV REQUIRED) 
set(${OpenCV_INCLUDE_DIRS} /usr/include/opencv/) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
MESSAGE(STATUS "CMAKE_ROOT: " ${OpenCV_INCLUDE_DIRS}) 
add_executable(DisplayImage DisplayImage.cpp) 
SET(OpenCV_LIBS opencv_core opencv_highgui opencv_imgproc) 
target_link_libraries(DisplayImage ${OpenCV_LIBS}) 
MESSAGE(STATUS "CMAKE_ROOT: " ${OpenCV_LIBS}) 

这里是我使用的CMake的配置。

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON .. 

最后,这里是我的配置file

编辑:另外,如果我跑 的gcc -o analyze_video.cpp objDetection -lopencv_core -lopencv_imgproc -lopencv_objdetect -lopencv_highgui

然后一切正常。所以我建立了库,但是我的CMake配置出了问题。

回答

0

OpenCV_INCLUDE_DIRS是一个列表。在CMake中,message(${OpenCV_INCLUDE_DIRS})将打印每个列表元素,其间没有任何分隔符。此外,OpenCV_INCLUDE_DIRS是标题的路径,而不是库。当定义一个函数(即找到头文件)但符号不存在时(即没有链接所需的函数库),会发生链接错误。

请通过更新您的问题来澄清您的问题,以包括项目中CMakeLists.txt文件的内容,用于OpenCV构建的CMake配置标志,或者提供GitHub Gist等链接(如果它太大)。您提供的信息越多,可以帮助您的人越快。

+0

@CraigScott,感谢您的编辑。 –

+0

啊哈,我以为双重安装已经添加了包含路径,因此包含路径变得无效。我可能会在哪个文件夹中找到二进制文件?为什么INCLUDE_DIRS变量会指向包含目录的基础? – Tri

+0

@Tri,让我为您提供一种使用OpenCV构建最小程序的方法: OpenCV build: 'cmake -DCMAKE_BUILD_TYPE = RELEASE .. && make -j4 && sudo make install'。 App的CMakeLists只有两行包含OpenCV:'find_package(OpenCV REQUIRED)''target_link_libraries($ {CMAKE_PROJECT_NAME} $ {OpenCV_LIBS})'。 并且不需要FindOpenCV.cmake或其他东西。 我想如果你能自己重现它。这是我的工作脚本,如果我想建立某些OpenCV模块:goo.gl/p1snyO。但要小心,检查需要启用哪些模块。 –