Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ROS、opencv3和CMake-无法删除库_C++_Opencv_Cmake_Ros_Opencv3.0 - Fatal编程技术网

C++ ROS、opencv3和CMake-无法删除库

C++ ROS、opencv3和CMake-无法删除库,c++,opencv,cmake,ros,opencv3.0,C++,Opencv,Cmake,Ros,Opencv3.0,工作环境: Kubuntu 14.04 LTS 64位 ROS Indigo(最新,全桌面安装) OpenCV 2.4.8 出于某种未知的原因,我决定安装ros-indigo-opencv3软件包,我几乎立即感到遗憾,因为我还有Ubuntu 14.04-OpenCV 2.4.8附带的默认版本 起初,我注意到QtCreator警告我2.4.8和3.0.0之间可能存在不兼容,当时我正在使用 find_package(OpenCV REQUIRED) 然后,错误开始围绕cv::立体声GBM模块的

工作环境:

  • Kubuntu 14.04 LTS 64位
  • ROS Indigo(最新,全桌面安装)
  • OpenCV 2.4.8
出于某种未知的原因,我决定安装ros-indigo-opencv3软件包,我几乎立即感到遗憾,因为我还有Ubuntu 14.04-OpenCV 2.4.8附带的默认版本

起初,我注意到QtCreator警告我2.4.8和3.0.0之间可能存在不兼容,当时我正在使用

find_package(OpenCV REQUIRED)
然后,错误开始围绕cv::立体声GBM模块的某些缺少的引用流动。名称空间或其他方面似乎有一些变化,我正在使用的库使用了OpenCV的2.x分支(发现这显然很难:D),因此我告诉自己——我想我将删除上述OpenCV 3.0.0的ROS包,并坚持使用2.4.8

卸载该软件包后,一切都崩溃了。尽管在我的项目的CMakeLists.txt中,我明确指出了版本2.4.8。使用

find_package(OpenCV 2.4.8 REQUIRED)
在使用roslaunch启动我的节点时,它立即死亡,并出现以下错误:

…/pmd_nano_节点:加载共享库时出错:libopencv_highgui.so.3.0:无法打开共享对象文件:没有此类文件或目录

嗯……好吧……我检查了一下我的系统上是否有遗留的东西(可能是坏包,无法安装,因此无法正确安装?)。对于我调用查找并用grep管道传输结果的惊喜

user:~$ locate libopencv | grep 3.0
我得到

所以最终还是留下了一些东西(我指的是一切:D)。然而,想象一下,当我将cd下载到/opt/ros/indigo/lib/时,发现没有一个文件与OpenCV有任何关联,更不用说OpenCV 3.0.0了,我会感到惊讶

使用pkg config至少返回我期望的结果:

user:~$ pkg-config --cflags opencv
-I/usr/include/opencv
user:~$ pkg-config --libs opencv
/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so ...
-lopencv_calib3d ...
注意:我仍然不知道为什么--cflags从不显示opencv2include文件夹(pkg config无法识别opencv2 as参数)

进一步的调查使我重新运行了我的项目的CMakeLists.txt,要求使用3.0.0版本,事实上,CMake现在抱怨只找到了2.4.8。尽管应用程序试图获得OpenCV的共享libs的3.0.0版本,其原因还有待观察

有没有什么建议或者以前遇到过这样问题的人

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(pmd_nano)

SET(CMAKE_CXX_FLAGS "-std=c++0x -fpermissive -Wno-deprecated -Wno-sign-compare")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
SET(CMAKE_CXX_LINK_FLAGS_DEBUG "-pg")

## 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
  cv_bridge
  image_transport
  pcl_conversions
  pcl_msgs
  pcl_ros
  roscpp
  sensor_msgs
  std_msgs
)

## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS system)
find_package(PCL REQUIRED)
find_package(OpenCV 2.4.8 REQUIRED COMPONENTS highgui imgproc)
# Do NOT use OpenCV 3.0.0 or all hell will break loose. Package incompatilibity will be a fascinating thing to deal with...

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
 INCLUDE_DIRS include
#  LIBRARIES pmd_nano
 CATKIN_DEPENDS cv_bridge image_transport pcl_conversions pcl_msgs pcl_ros roscpp sensor_msgs std_msgs uvc_camera
 DEPENDS
   system_lib # Boost PCL OpenCV
   boost_system
   PCL
   opencv_highgui opencv_imgproc
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${Boost_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

## Declare a cpp library
# add_library(pmd_nano
#   src/${PROJECT_NAME}/pmd_nano_node.cpp
# )

## Declare a cpp executable
add_executable(pmd_nano_node
    src/pmd_nano_node.cpp
    src/ColorCamera.cpp
    src/DepthCamera.cpp
    src/PMDNano.cpp
)

## Add cmake target dependencies of the executable/library
## as an example, message headers may need to be generated before nodes
# add_dependencies(pmd_nano_node pmd_nano_generate_messages_cpp)

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})
#link_directories(${PROJECT_NAME}_node ${Boost_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME}_node boost_system)
link_directories(${PROJECT_NAME}_node ${PCL_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME}_node opencv_highgui opencv_imgproc)
target_link_libraries(${PROJECT_NAME}_node pthread)

target_link_libraries(pmd_nano_node ${PROJECT_SOURCE_DIR}/lib/libpmdaccess2.so)


#############
## Testing ##
#############

## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_pmd_nano.cpp)
# if(TARGET ${PROJECT_NAME}-test)
#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()

## Add folders to be run by python nosetests
# catkin_add_nosetests(test)
编辑:


运行sudo updatedb至少解决了定位问题。但运行时错误仍然存在。

找到了解决方案。我的工作区似乎因为拆下了包裹而变得一团糟。因此,在我删除develbuild之后,接着是一个快速的catkin\u make之后,它现在运行良好。

如果catkin build中有什么奇怪的东西,这总是我做的第一件事(事实上,我必须经常这样做…)。我不确定这是cmake问题还是catkin的特别之处,但似乎有些自动生成的文件在环境变化时不会自动更新。最近我经常清理该死的工作区,我完全认为我已经这样做了。XD至于这是一个柳絮问题还是cmake问题——我认为这是自cmake本身立即检测到3.0.0不再可用以来的第一个问题。虽然柳絮使用CMake,但它也有很多额外的东西。如果他们诚实地改变这种行为,那就太好了。这不是我第一次花这么多时间处理一个本来不应该存在的问题。
cmake_minimum_required(VERSION 2.8.3)
project(pmd_nano)

SET(CMAKE_CXX_FLAGS "-std=c++0x -fpermissive -Wno-deprecated -Wno-sign-compare")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
SET(CMAKE_CXX_LINK_FLAGS_DEBUG "-pg")

## 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
  cv_bridge
  image_transport
  pcl_conversions
  pcl_msgs
  pcl_ros
  roscpp
  sensor_msgs
  std_msgs
)

## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS system)
find_package(PCL REQUIRED)
find_package(OpenCV 2.4.8 REQUIRED COMPONENTS highgui imgproc)
# Do NOT use OpenCV 3.0.0 or all hell will break loose. Package incompatilibity will be a fascinating thing to deal with...

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
 INCLUDE_DIRS include
#  LIBRARIES pmd_nano
 CATKIN_DEPENDS cv_bridge image_transport pcl_conversions pcl_msgs pcl_ros roscpp sensor_msgs std_msgs uvc_camera
 DEPENDS
   system_lib # Boost PCL OpenCV
   boost_system
   PCL
   opencv_highgui opencv_imgproc
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
# include_directories(include)
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${Boost_INCLUDE_DIRS}
  ${PCL_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

## Declare a cpp library
# add_library(pmd_nano
#   src/${PROJECT_NAME}/pmd_nano_node.cpp
# )

## Declare a cpp executable
add_executable(pmd_nano_node
    src/pmd_nano_node.cpp
    src/ColorCamera.cpp
    src/DepthCamera.cpp
    src/PMDNano.cpp
)

## Add cmake target dependencies of the executable/library
## as an example, message headers may need to be generated before nodes
# add_dependencies(pmd_nano_node pmd_nano_generate_messages_cpp)

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})
#link_directories(${PROJECT_NAME}_node ${Boost_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME}_node boost_system)
link_directories(${PROJECT_NAME}_node ${PCL_LIBRARY_DIRS})
target_link_libraries(${PROJECT_NAME}_node opencv_highgui opencv_imgproc)
target_link_libraries(${PROJECT_NAME}_node pthread)

target_link_libraries(pmd_nano_node ${PROJECT_SOURCE_DIR}/lib/libpmdaccess2.so)


#############
## Testing ##
#############

## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_pmd_nano.cpp)
# if(TARGET ${PROJECT_NAME}-test)
#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()

## Add folders to be run by python nosetests
# catkin_add_nosetests(test)