Tôi đang gặp khó khăn trong việc giải quyết một vấn đề cụ thể mà tôi có: Tôi không thể xác định được thủ phạm.OpenCV với CMake phiên bản 3.5.2 so với CMake 2.X.X
hệ thống: Jetson TX1, arm64 hạt nhân, userspace 32b, opencv4tegra
trạng: đã và đang xây dựng dự án sử dụng:
find_package(OpenCV)
Và điều này đã làm việc tốt và biên soạn.
Lỗi: Tôi xây dựng từ nguồn và cài đặt CMake 3.5.2. Bây giờ tôi không còn có thể xây dựng bất kỳ dự án nào phụ thuộc vào OpenCV. Tôi nhận được lỗi mối liên kết mà điểm không thể tìm thấy:
opencv_dep_cudart
Tôi giả định các vấn đề đang gây ra trong OpenCVCConfig.cmake
, xung quanh thời điểm này:
# 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"
)
Out of the file: /usr/share/OpenCV/OpenCVModules-release.cmake
Tuy nhiên, điều này tập tin không thay đổi giữa các phiên bản CMake vì nó là một tệp OpenCV. Vì vậy, đây phải là cách nó được xử lý.
Hoàn nguyên CMake của tôi về 2.8.12.2 theo cách thủ công cho phép tôi tạo lại. Đây là một ví dụ về lệnh make sử dụng OpenCV. Lưu ý đúng libs 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
Suy nghĩ? Tôi muốn có thể giữ CMake mới hơn trên hệ thống của mình nhưng không hiểu đủ để khắc phục sự cố. Nếu bạn cho rằng điều này quá độc đáo với hệ thống, tôi sẽ rút câu hỏi.
Đối với tôi cùng một vấn đề tồn tại nếu tôi xây dựng các dự án phụ thuộc vào 2.4. –
Ok, như thiết lập workaround trong cmake 'CUDA_USE_STATIC_CUDA_RUNTIME = false' không hoạt động –