2015-10-28 5 views
1

У меня есть 2 установки opencv (в отдельном месте). Один из них установлен с apt-get (версия 2.4). В то время как другая версия 3.0 установлена ​​из исходного кода.Избегайте связывания OpenCV2.4 и OpenCV3.0 с cmake

Я заметил, что мой catkin_make (CMake) связывает как opencv2.4 и opencv3.0

[ri-desktop2 robotic_vision]$ ldd devel/lib/visensor_dgem/dgem 
    linux-vdso.so.1 => (0x00007ffd30f5e000) 
    libcv_bridge.so => /opt/ros/jade/lib/libcv_bridge.so (0x00007f7eb7fa8000) 
    libopencv_highgui.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4 (0x00007f7eb7d5d000) 
    libopencv_core.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4 (0x00007f7eb7926000) 
    libroscpp.so => /opt/ros/jade/lib/libroscpp.so (0x00007f7eb75d3000) 
    libroscpp_serialization.so => /opt/ros/jade/lib/libroscpp_serialization.so (0x00007f7eb73d0000) 
    librosconsole.so => /opt/ros/jade/lib/librosconsole.so (0x00007f7eb71a7000) 
    librostime.so => /opt/ros/jade/lib/librostime.so (0x00007f7eb6f7d000) 
    libboost_system.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 (0x00007f7eb6d79000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7eb6b5b000) 
    libopencv_core.so.3.0 => /usr/local/lib/libopencv_core.so.3.0 (0x00007f7eb5b1b000) 
    libopencv_highgui.so.3.0 => /usr/local/lib/libopencv_highgui.so.3.0 (0x00007f7eb58dd000) 
    libopencv_imgproc.so.3.0 => /usr/local/lib/libopencv_imgproc.so.3.0 (0x00007f7eb4941000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7eb463d000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7eb4427000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7eb4062000) 
    libopencv_imgproc.so.2.4 => /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4 (0x00007f7eb3bd2000) 
    libGL.so.1 => /usr/lib/nvidia-352/libGL.so.1 (0x00007f7eb38a2000) 
    libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f7eb364d000) 
    libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f7eb3427000) 
    libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f7eb31b5000) 
    libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f7eb2f5e000) 
    libIlmImf.so.6 => /usr/lib/x86_64-linux-gnu/libIlmImf.so.6 (0x00007f7eb2caf000) 
    libHalf.so.6 => /usr/lib/x86_64-linux-gnu/libHalf.so.6 (0x00007f7eb2a6c000) 
    libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007f7eb242f000) 
    libgdk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0 (0x00007f7eb217c000) 
    libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f7eb1f2b000) 
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7eb1c23000) 
    libgtkglext-x11-1.0.so.0 => /usr/lib/libgtkglext-x11-1.0.so.0 (0x00007f7eb1a1f000) 
    libgdkglext-x11-1.0.so.0 => /usr/lib/libgdkglext-x11-1.0.so.0 (0x00007f7eb17bb000) 
    libdc1394.so.22 => /usr/lib/x86_64-linux-gnu/libdc1394.so.22 (0x00007f7eb1547000) 
    libv4l1.so.0 => /usr/lib/x86_64-linux-gnu/libv4l1.so.0 (0x00007f7eb1341000) 
    libavcodec.so.54 => /usr/lib/x86_64-linux-gnu/libavcodec.so.54 (0x00007f7eb05ed000) 
    libavformat.so.54 => /usr/lib/x86_64-linux-gnu/libavformat.so.54 (0x00007f7eb02cb000) 
    libavutil.so.52 => /usr/lib/x86_64-linux-gnu/libavutil.so.52 (0x00007f7eb00a6000) 
    libswscale.so.2 => /usr/lib/x86_64-linux-gnu/libswscale.so.2 (0x00007f7eafe5f000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7eafb59000) 
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7eaf940000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7eaf738000) 
    libtbb.so.2 => /usr/lib/libtbb.so.2 (0x00007f7eaf504000) 
    libxmlrpcpp.so => /opt/ros/jade/lib/libxmlrpcpp.so (0x00007f7eaf2e6000) 
    libcpp_common.so => /opt/ros/jade/lib/libcpp_common.so (0x00007f7eaf0de000) 
    libboost_thread.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0 (0x00007f7eaeec8000) 
    libboost_filesystem.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.54.0 (0x00007f7eaecb2000) 
    librosconsole_log4cxx.so => /opt/ros/jade/lib/librosconsole_log4cxx.so (0x00007f7eaea9e000) 
    librosconsole_backend_interface.so => /opt/ros/jade/lib/librosconsole_backend_interface.so (0x00007f7eae89c000) 

Мои CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3) 
project(visensor_node) 

find_package(catkin REQUIRED COMPONENTS 
    roscpp 
    message_generation 
    geometry_msgs 
    sensor_msgs 
    cv_bridge 
    std_msgs 
    image_transport 
    camera_info_manager 
    dynamic_reconfigure 
    cmake_modules 
) 

# check libvisensor version, flags not used later 
find_package(libvisensor 1.1.0 REQUIRED) 

add_message_files(
    DIRECTORY msg 
    FILES visensor_imu.msg 
    visensor_time_host.msg 
    visensor_calibration.msg 
) 

add_service_files(
    FILES 
    visensor_calibration_service.srv 
) 

generate_messages(DEPENDENCIES geometry_msgs) 

include_directories(include ${catkin_INCLUDE_DIRS} ${libvisensor_INCLUDE_DIRS}) 

find_package(Eigen3 REQUIRED) 
include_directories(${EIGEN_INCLUDE_DIR}) 
add_definitions(${EIGEN_DEFINITIONS}) 

find_package(OpenCV 3.0 REQUIRED COMPONENTS core highgui imgproc) 

generate_dynamic_reconfigure_options(cfg/visensor_node.cfg) 

if(NOT DEFINED CMAKE_BUILD_TYPE) 
    set(CMAKE_BUILD_TYPE Release) 
endif(NOT DEFINED CMAKE_BUILD_TYPE) 

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -std=c++0x -D__STRICT_ANSI__") 

catkin_package(
    INCLUDE_DIRS include ${catkin_INCLUDE_DIRS} 
    CATKIN_DEPENDS 
    roscpp 
    sensor_msgs 
    cv_bridge 
    std_msgs 
    image_transport 
    camera_info_manager 
) 

#build and add libvisensor system library dependency 
add_executable(visensor_node src/visensor_node.cpp src/visensor.cpp) 
add_executable(custom_node src/custom_node.cpp include/custom_node.h) 

add_dependencies(visensor_node ${${PROJECT_NAME}_EXPORTED_TARGETS}}) 
add_dependencies(custom_node ${${PROJECT_NAME}_EXPORTED_TARGETS}}) 

target_link_libraries(visensor_node ${libvisensor_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) 
target_link_libraries(custom_node ${libvisensor_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) 

Что может идти не так.?

+1

Я не уверен, что это может быть проблемой, но, возможно, одна из зависимостей вашего пакета использует OpenCV 2.4? Вы должны проверить это, напечатав $ {catkin_LIBRARIES} и посмотреть, есть ли там OpenCV 2.4. – luator

+0

Выглядит хорошо. Вы вызываете find_package (сначала OpenCV, поэтому все вызовы find_package не будут выполняться по мере использования кешированных значений. Или есть ли другая часть ссылки OpenCV помимо ядра highgui imgproc? – usr1234567

+0

Я выясняю это. На самом деле моя ros зависела от opencv2.4 так же был catkin, который, в свою очередь, имел cv_bridge. В качестве решения я установил ros из исходного кода. Это фиксировало его. – mkuse

ответ

1

Я недавно опубликовал это как ответ here

Библиотеки могут быть включены и связаны с include_directories() и link_directories(), как это:

cmake_minimum_required(VERSION 2.4.6) 
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) 
... 
include_directories(${PROJECT_SOURCE_DIR}) 

include_directories(/path/to/opencv/OpenCV-2.4.1/include) 
link_directories(/path/to/opencv/OpenCV-2.4.1/lib) 
... 

# Set the build type. Options are: 
# Coverage  : w/ debug symbols, w/o op ... 

и удалить зЬй. ссылаясь на ваши текущие библиотеки OpenCV.

+2

Пожалуйста, не оставляйте ссылки только на ответы на другие вопросы переполнения стека. , голос/флаг, чтобы закрыть как дубликат, или, если вопрос не является дубликатом, адаптируйте ответ на этот конкретный вопрос. –

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