OpenCV与CMake版本3.5.2对比CMake 2.X.X

时间:2016-05-30 23:01:10

标签: opencv cmake

我无法解决我遇到的一个特定问题:我无法确定罪魁祸首。

系统:Jetson TX1,arm64内核,32b用户空间,opencv4tegra

情况:一直在使用以下方式构建项目:

find_package( OpenCV )

这种方法很好并且编译好了。

错误:我是从源码构建并安装了CMake 3.5.2。现在我不再构建任何依赖OpenCV的项目了。我收到了无法找到的链接器错误:

opencv_dep_cudart

我假设问题是由OpenCVCConfig.cmake引起的,在这一点上:

# Import target "opencv_core" for configuration "Release"
set_property(TARGET opencv_core APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(opencv_core PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE "opencv_dep_cudart;opencv_dep_nppc;opencv_dep_nppi;opencv_dep_npps;dl;m;pthread;rt;tbb"
  IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libopencv_core.so.2.4.12"
  IMPORTED_SONAME_RELEASE "libopencv_core.so.2.4"
  )

文件外:/usr/share/OpenCV/OpenCVModules-release.cmake

但是,此文件在CMake版本之间不会更改,因为它是OpenCV文件。所以这必须是它的处理方式。

手动将我的CMake恢复到2.8.12.2允许我再次构建。以下是使用OpenCV的make命令的示例。请注意正确的cuda libs:

Linking CXX executable DuoInterfaceTest
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/DuoInterfaceTest.dir/link.txt --verbose=1
/usr/bin/c++   -O2 -g -DNDEBUG -std=gnu++11   CMakeFiles/DuoInterfaceTest.dir/src/mainTest.cpp.o  -o DuoInterfaceTest  -L/home/ubuntu/catkin_ws/duointerface/lib/linux/arm -rdynamic libDuoInterface.a /usr/lib/libopencv_vstab.so.2.4.12 /usr/lib/libopencv_tegra.so.2.4.12 /usr/lib/libopencv_imuvstab.so.2.4.12 /usr/lib/libopencv_facedetect.so.2.4.12 /usr/lib/libopencv_esm_panorama.so.2.4.12 /usr/lib/libopencv_detection_based_tracker.so.2.4.12 /usr/lib/libopencv_videostab.so.2.4.12 /usr/lib/libopencv_video.so.2.4.12 /usr/lib/libopencv_ts.a /usr/lib/libopencv_superres.so.2.4.12 /usr/lib/libopencv_stitching.so.2.4.12 /usr/lib/libopencv_photo.so.2.4.12 /usr/lib/libopencv_objdetect.so.2.4.12 /usr/lib/libopencv_ml.so.2.4.12 /usr/lib/libopencv_legacy.so.2.4.12 /usr/lib/libopencv_imgproc.so.2.4.12 /usr/lib/libopencv_highgui.so.2.4.12 /usr/lib/libopencv_gpu.so.2.4.12 /usr/lib/libopencv_flann.so.2.4.12 /usr/lib/libopencv_features2d.so.2.4.12 /usr/lib/libopencv_core.so.2.4.12 /usr/lib/libopencv_contrib.so.2.4.12 /usr/lib/libopencv_calib3d.so.2.4.12 /usr/lib/libopencv_tegra.so.2.4.12 /usr/lib/libopencv_stitching.so.2.4.12 /usr/lib/libopencv_gpu.so.2.4.12 /usr/lib/libopencv_photo.so.2.4.12 /usr/lib/libopencv_legacy.so.2.4.12 /usr/local/cuda-7.0/lib/libcufft.so /usr/lib/libopencv_video.so.2.4.12 /usr/lib/libopencv_objdetect.so.2.4.12 /usr/lib/libopencv_ml.so.2.4.12 /usr/lib/libopencv_calib3d.so.2.4.12 /usr/lib/libopencv_features2d.so.2.4.12 /usr/lib/libopencv_highgui.so.2.4.12 /usr/lib/libopencv_imgproc.so.2.4.12 /usr/lib/libopencv_flann.so.2.4.12 /usr/lib/libopencv_core.so.2.4.12 /usr/local/cuda-7.0/lib/libcudart.so /usr/local/cuda-7.0/lib/libnppc.so /usr/local/cuda-7.0/lib/libnppi.so /usr/local/cuda-7.0/lib/libnpps.so -ldl -lm -lpthread -lrt -ltbb -lDUO -Wl,-rpath,/home/ubuntu/catkin_ws/duointerface/lib/linux/arm:/usr/local/cuda-7.0/lib

思考?我希望能够将更新的CMake保留在我的系统上,但是不太了解解决问题。如果你认为这个系统太独特了,我会撤回这个问题。

1 个答案:

答案 0 :(得分:2)

正如Michael Mairegger所说,你必须通过

来编译构建目录
sudo cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=false

但我注意到的另一件事是,如果我之后尝试make,除非我执行cmake命令两次,否则它将无法工作。