避免使用cmake链接OpenCV2.4和OpenCV3.0

时间:2015-10-28 09:21:01

标签: opencv cmake ros

我有2个opencv安装(在不同的位置)。一个是与apt-get(版本2.4)一起安装的。另一个是从源代码安装的3.0版。

我注意到我的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 个答案:

答案 0 :(得分: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库。