环境:gcc(Ubuntu 4.8.4-2ubuntu1~14.04)4.8.4
我使用 find_package( OpenCV REQUIRED )
找到opencv库并使用 target_link_libraries(executable ${OpenCV_LIBS})
链接opencv .
我打开 SET(CMAKE_VERBOSE_MAKEFILE 1)
,这样我就可以看到编译器的命令是什么 .
的CMakeLists.txt:
cmake_minimum_required (VERSION 2.8.3)
project (video_capture)
find_package( OpenCV REQUIRED )
SET(CMAKE_VERBOSE_MAKEFILE 1)
add_executable( vidcapture main.cpp)
target_link_libraries(vidcapture ${OpenCV_LIBS})
从编译器输出(link)可以看出,opencv库在 -ldl -lm -lpthread -lrt -lGLU -lGL -lSM -lICE -lX11 -lXext -ltbb
之后被链接两次 . 当需要将 -lrt
放在编译器命令的末尾时,这似乎会产生问题,如下所述:link
如果我在编译器命令结束时手动添加 -lrt
(即 -lrt
出现两次,一次出现在opencv lib之后,一次出现在后面),则无效 .
题:
-
为什么opencv被链接两次?
-
我应该如何克服这个问题,以便
-lrt
只放在编译器命令的末尾一次?
更新:
MESSAGE("${OpenCV_LIBS}")
给了我:opencv_videostab; opencv_video ; opencv_ts; opencv_superres; opencv_stitching; opencv_photo; opencv_ocl; opencv_objdetect; opencv_nonfree; ope ncv_ml; opencv_legacy; opencv_imgproc; opencv_highgui; opencv_gpu; opencv_flann; opencv_features2d; opencv_core; opencv_contrib; opencv_calib 3d
而 the compiler commands 是:/usr/local/lib/libopencv_videostab.so.2.4.9 /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_superres.so.2.4.9 / usr / local / lib / libopencv_stitching .so.2.4.9 /usr/local/lib/libopencv_contrib.so.2.4.9 -ldl -lm -lpthread -lrt -lGLU -lGL -lSM -lICE -lX11 -lXext -ltbb / usr / local / lib / libopencv_nonfree .so.2.4.9 /usr/local/lib/libopencv_ocl.so.2.4.9 /usr/local/lib/libopencv_gpu.so.2.4.9 /usr/local/lib/libopencv_photo.so.2.4.9 / usr /local/lib/libopencv_objdetect.so.2.4.9 /usr/local/lib/libopencv_legacy.so.2.4.9 /usr/local/lib/libopencv_video.so.2.4.9 /usr/local/lib/libopencv_ml.so.2.4.9 / usr / local / lib / libopencv_calib3d . so.2.4.9 /usr/local/lib/libopencv_features2d.so.2.4.9 /usr/local/lib/libopencv_highgui.so.2.4.9 /usr/local/lib/libopencv_imgproc.so.2.4.9 / usr / local / lib / libopencv_flann.so.2.4.9 /usr/local/lib/libopencv_core.so.2.4.9 -Wl,-rpath,/ usr / local / lib
您可以看到opencv_video模块在 ${OpenCV_LIBS}
中的opencv_ts模块之前是列表,而在编译器命令中它是之后放置的 . 我想知道这是否是一些opencv自我依赖问题(例如opencv_video取决于应首先链接的opencv_videostab?
1 回答
似乎CMake没有发送文件
FindOpenCV.cmake
,因此您使用3d party one配置OpenCV库 .可能,
FindOpenCV.cmake
实现并不完全正确 .在链接之前,只需将
OpenCV_LIBS
修改为您想要的: