【问题标题】:catkin package library link to the openCV librarycatkin 包库链接到 openCV 库
【发布时间】:2020-09-07 00:44:56
【问题描述】:

我已经为此失去了一段时间。所以我需要在Ubuntu 18.04上使用catkin构建的ros melodic包中的opencv。这个想法是制作一个实际上只是一个库的包,这个库使用所有常规的 ros 包(image_transport、cv_bridge、roscpp、rospy、std_msgs、genmsg、tf、actionlib_msgs、actionlib)。 只是为了让你知道,我安装了 2 个 opencv,usr/share 中的 openCV 3.2 和usr/local/share 中的 openCV 4.3,这就是为什么我专门将 openCV_DIR 设置为指向 3.2 版本。 我尝试将message 添加到CMakeList.txt 以打印出opencv_version、opencv_include_dir 和opencv_libs,版本为3.2.0,include_dirs 为/usr/include;/usr/include/opencv,libs 为opencv_calib3d;opencv_core;opencv_features2d;opencv_flann;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_shape;opencv_stitching;opencv_superres;opencv_video;opencv_videoio;opencv_videostab;opencv_viz;opencv_aruco;opencv_bgsegm;opencv_bioinspired;opencv_ccalib;opencv_datasets;opencv_dpm;opencv_face;opencv_freetype;opencv_fuzzy;opencv_hdf;opencv_line_descriptor;opencv_optflow;opencv_phase_unwrapping;opencv_plot;opencv_reg;opencv_rgbd;opencv_saliency;opencv_stereo;opencv_structured_light;opencv_surface_matching;opencv_text;opencv_ximgproc;opencv_xobjdetect;opencv_xphoto

在我的pkg_library CMakeList.txt 我有这个:

cmake_minimum_required(VERSION 2.8.3)
project(pkg_libraries)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

set( OpenCV_DIR "/usr/share/OpenCV/" )

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(
  catkin REQUIRED COMPONENTS
          roscpp
          rospy
          std_msgs
          genmsg
          tf
          actionlib_msgs 
          actionlib

          sensor_msgs
          cv_bridge

          image_transport
          message_generation

)
find_package(
  OpenCV REQUIRED 
)

catkin_package(
  INCLUDE_DIRS include
  LIBRARIES pkg_libraries
  CATKIN_DEPENDS roscpp rospy std_msgs tf actionlib actionlib_msgs cv_bridge
)

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

add_library(${PROJECT_NAME}
            src/imageSaver.cpp 
)

target_link_libraries( ${PROJECT_NAME} ${catkin_LIBRARIES} ${OpenCV_LIBS} )

install(
  TARGETS ${PROJECT_NAME}
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
install(
  DIRECTORY include/${PROJECT_NAME}/
  DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

pkg_librariescatkin_build 的编译看起来还不错,但后来当我尝试在另一个包含pkg_libraries 的包中执行catkin_build 时,它失败并出现错误:

libpkg_libraries.so:未定义的引用 `cv::imwrite(std::__cxx11::basic_string, std::allocator > const&, cv::_InputArray const&, std::vector > const&)'

我想说的是链接器错误,因为我只在pkg_libraries 中使用了cv::imwrite。而报错的包只包含pkg_libraries。所以pkg_libraries但显然没有正确链接,但它构建时没有错误。

我在这里错过了什么?

谢谢

【问题讨论】:

    标签: opencv cmake ros catkin


    【解决方案1】:

    问题是因为pkg_libraries 像共享库一样构建,我在其中有另一个.cpp.h 使用不同的openCV 版本(默认opencv 3.2),我认为问题发生了因为通过加载libpkg_libraries.so 我在openCV 版本之间产生了冲突。 无论如何,现在我已经制作了单独的库,并且它可以正常工作。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多