Estoy escribiendo un programa que usa OpenCV (instalado en un directorio local, ya que no tengo permisos de raíz en esa máquina) y he escrito el archivo CMakeLists.txt correspondiente. Mi problema es que la compilación falla en la etapa de vinculación de diferentes maneras (he pasado tres horas probando todas las diferentes soluciones propuestas en la web, así que he visto muchos resultados). Aquí tiene las configuraciones/resultados que tienen más sentido para mí, a pesar de que llevan a un fracaso: [en project_root/CMakeLists.txt]:Problema de vinculación con OpenCV y CMake
cmake_minimum_required(VERSION 2.8)
project(CUDA_learning)
set(OpenCV_INCLUDE_DIR "path/to/opencv_CUDA/include")
include_directories(${OpenCV_INCLUDE_DIR})
set(OpenCV_LIBS_DIR "path/to/opencv_CUDA/lib")
link_directories(${OpenCV_LIBS_DIR})
set(OpenCV_LIBS "opencv_core opencv_imgproc opencv_calib3d opencv_video opencv_features2d opencv_ml opencv_highgui opencv_objdetect opencv_contrib opencv_legacy opencv_gpu")
find_package(Boost COMPONENTS system filesystem program_options regex REQUIRED)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
else(Boost_FOUND)
message(FATAL_ERROR "Cannot build application without Boost. Please set Boost_INCLUDE_DIR.")
endif(Boost_FOUND)
set(CMAKE_BUILD_TYPE debug)
add_definitions("-Wall")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/../bin)
subdirs (
../src
)
[en project_root/src/CMakeLists.txt] :
FILE(GLOB dir_source *.cc 2D/*.cc)
FILE(GLOB dir_header *.hh 2D/*.hh)
add_executable(${PROJECT_NAME} ${dir_source} ${dir_header})
target_link_libraries(${PROJECT_NAME} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${OpenCV_LIBS})
Resultado:
Linking CXX executable ../../bin/CUDA_learning
c++: opencv_imgproc: No such file or directory
c++: opencv_calib3d: No such file or directory
c++: opencv_video: No such file or directory
c++: opencv_features2d: No such file or directory
c++: opencv_ml: No such file or directory
c++: opencv_highgui: No such file or directory
c++: opencv_objdetect: No such file or directory
c++: opencv_contrib: No such file or directory
c++: opencv_legacy: No such file or directory
c++: opencv_gpu: No such file or directory
Si, contrariamente a las recomendaciones dadas en la red, me puso una "l" antes de la biblioteca OpenCV nombre I consiga:
Linking CXX executable ../../bin/CUDA_learning
/usr/bin/ld: cannot find -lopencv_core
collect2: ld returned 1 exit status
make[2]: *** [../bin/CUDA_learning] Error 1
make[1]: *** [src/CMakeFiles/CUDA_learning.dir/all] Error 2
make: *** [all] Error 2
¿Alguien sabe cómo resolver esto? Estoy literalmente enloqueciendo por esto ... ¡Muchas gracias de antemano! Cheers, Rob
Hola, gracias por su respuesta, lo he intentado pero sigo teniendo el error "no puedo encontrar -lopencv_core" ... – Rob
Hmmmm ... ¿y si cambia "subdirs" por "add_subdirectory" ? – DLRdave
he cambiado como add_subdirectory ( $ {} CMAKE_BINARY_DIR /../ src ) pero todavía no hay cambio en el resultado :( – Rob