2016-05-30 2 views
8

Я затрудняюсь решить конкретный вопрос, который у меня есть: я не могу точно определить виновника.OpenCV с версией CMake 3.5.2 против CMake 2.X.X

система: 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 вручную позволило мне снова построить. Ниже приведен пример команды make, использующей OpenCV. Обратите внимание на правильные библиотеки cuda:

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 в моей системе, но не понимаю достаточно, чтобы исправить эту проблему. Если вы считаете, что это слишком системно-уникально, я выведу вопрос.

+0

Для меня такая же проблема существует, если я строю проекты, зависящие от 2.4. –

+1

Хорошо, так как настройка обхода в cmake 'CUDA_USE_STATIC_CUDA_RUNTIME = false' действительно работает –

ответ

2

Как отмечает Майкл Mairegger, вы должны CMake в каталог сборки, делая

sudo cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=false 

Но одна дополнительная вещь, которую я заметил, что если я попытаюсь make впоследствии он не будет работать, если я не делать cmake команда дважды.

Смежные вопросы