使用CMake时链接器找不到OpenCV库
我在/usr/local/lib中安装了OpenCV2.4.0的副本 我的程序已正确编译,但当调用链接器时,它会出现以下错误:使用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-
/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)