2016-05-30 22 views
8

Sono in perdita per risolvere un particolare problema che ho: non riesco a individuare il colpevole.OpenCV con CMake versione 3.5.2 vs CMake 2.X.X

Sistema: Jetson TX1, kernel arm64, userspace 32b, opencv4tegra

Situazione: hanno costruito progetti che utilizzano:

find_package(OpenCV) 

E questo ha funzionato benissimo e compilato.

Errore: Ho creato da origine e installato CMake 3.5.2. Ora non posso più costruire progetti che dipendono da OpenCV. Ricevo errori del linker quel punto non riesce a trovare:

opencv_dep_cudart 

Io parto dal presupposto i problemi sono causati in OpenCVCConfig.cmake, intorno a questo punto:

# 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" 
) 

Fuori del file: /usr/share/OpenCV/OpenCVModules-release.cmake

Tuttavia, questo il file non cambia tra le versioni di CMake in quanto è un file OpenCV. Quindi questo deve essere il modo in cui viene elaborato.

Ripristinare manualmente il mio CMake al 2.8.12.2 mi ha permesso di ricostruire manualmente. Ecco un esempio di un comando make che utilizza OpenCV. Nota le libere cuda corrette:

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 

Pensieri? Mi piacerebbe essere in grado di mantenere il CMake più recente sul mio sistema ma non capisco abbastanza per risolvere il problema. Se pensi che sia troppo unico per il sistema, ritirerò la domanda.

+0

Per me lo stesso problema esiste se si creano progetti che dipendono dal 2.4. –

+1

Ok, come impostazione di soluzione alternativa in cmake 'CUDA_USE_STATIC_CUDA_RUNTIME = false' funziona –

risposta

2

Come notato da Michael Mairegger, è necessario CMake nella directory di compilazione facendo

sudo cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=false 

Ma una cosa in più che ho notato è che se provo a make poi non funzionerà a meno che non faccio il cmake comando due volte.