使用CMake时链接器找不到OpenCV库

使用CMake时链接器找不到OpenCV库,opencv,cmake,Opencv,Cmake,我在/usr/local/lib中安装了OpenCV2.4.0的副本 我的程序已正确编译,但当调用链接器时,它会出现以下错误: /home/zhouw/moos-ivp-zhouw/trunk/src/pATRTest/mst.cpp:661: undefined reference to 'cv::_OutputArray::_OutputArray(cv::Mat const&)' CMakeFiles/pATR.dir/mst.cpp.o:/home/zhouw/moos-ivp-

我在/usr/local/lib中安装了OpenCV2.4.0的副本

我的程序已正确编译,但当调用链接器时,它会出现以下错误:

/home/zhouw/moos-ivp-zhouw/trunk/src/pATRTest/mst.cpp:661: undefined reference to 'cv::_OutputArray::_OutputArray(cv::Mat const&)'
CMakeFiles/pATR.dir/mst.cpp.o:/home/zhouw/moos-ivp-zhouw/trunk/src/pATRTest/mst.cpp:675: more undefined references to `cv::_OutputArray::_OutputArray(cv::Mat const&)' 
collect2: ld returned 1 exit status
make[2]: *** [../bin/pATR] Error 1
make[1]: *** [src/pATRTest/CMakeFiles/pATR.dir/all] Error 2
make: *** [all] Error 2
奇怪的是,我的程序大量使用opencv,如果CMake在查找库时遇到问题,它应该会抱怨比jsut有更多未定义的引用

我试着加上 在我的cmake文件中链接_目录(“/usr/local/lib”),但没有帮助。 还有另一个名为POCO的库也安装在/usr/local/lib下。我的程序也链接到POCO库,但CMake似乎很容易找到它们

如果我手动链接-L/usr/local/lib,它将正确链接而不会出错

CMakeLists.txt如下所示

PROJECT(pATR)

#what files are needed?
SET(SRCS
spline.hpp
utils.hpp utils.cpp
mst.hpp mst.cpp
cluster.hpp cluster.cpp
target.hpp target.cpp
detector.hpp detector.cpp
classifier.hpp classifier.cpp
atr.hpp atr.cpp
MOOSAtr.h MOOSAtr.cpp
main.cpp
)

ADD_EXECUTABLE(pATR ${SRCS})

# indicate how to link
#LINK_DIRECTORIES("/usr/local/lib")
TARGET_LINK_LIBRARIES(pATR opencv_core opencv_highgui opencv_imgproc MOOS)

INSTALL(TARGETS
pATR
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)

知道发生了什么吗?非常感谢

如果您有CMake 2.8,我建议使用
find_package(OpenCV)
加载库

这里有一个例子

CMake文件:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

我不确定CMake找不到链接库是否有意义。CMake会找到您的依赖项并生成Makefile,但实际上它不会为您编译和链接

你的错误不是来自CMake,对吗?它们是自制的

我总是手动链接这个

g++ -o myopencvapp `pkg-config --cflags --libs opencv` myopencvapp.cpp`
调用g++.

时,您的目标是:

find_package(OPENCV COMPONENTS core imgproc highgui REQUIRED)
从文档中:

带组件的软件包

有些库不是单一的,而是有一个或多个依赖的 库或组件。一个值得注意的例子是Qt库, 其中附带了组件QtOpenGL和QtXml。到 使用这两个组件,在find_包中使用以下命令 命令:

此外,有关更多信息,您可以查看以下链接


在我发布问题之前,我尝试了find_软件包(需要OpenCV),但不知何故,我没有将库链接为${OpenCV_LIBS},但仍然使用了它们各自的名称,即OpenCV_core OpenCV_highgui OpenCV_imgproc。谢谢,现在一切都好了!今天发生了一件怪事。我将软件的整个目录树复制到另一台linux机器上,使用相同版本的所有内容和相同的OpenCV安装。返回链接错误!我添加了SET(OpenCV_LIBS OpenCV_core OpenCV_highgui OpenCV_imgproc)以使它这次能够工作。这意味着什么?find_软件包不能正常工作?我想不出一个简单的解释,明确地设置它会使它工作。也许有更多的CMake经验的人可以对此有所启发。谢谢你的回复!是的,手动链接可以工作。我只是认为/usr/local/lib是cmake查找libraries的默认目录
find_package(Qt COMPONENTS QtOpenGL QtXml REQUIRED)