【发布时间】:2015-09-29 00:55:36
【问题描述】:
环境: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
而编译器命令是:/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?
【问题讨论】: