我正在使用Ubuntu 12.04计算机,我遇到以下问题: 我正在尝试使用CMake编译和构建C ++文件,但是当我在“cmake ...”之后给出命令“make”时,我得到了错误:
pcl_openni_grabber.cpp:2:29:致命错误:pcl / point_cloud.h:没有这样的文件或目录 编译终止。
现在我的CMakeLists.txt是以下内容:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcl-openni-grabber)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (pcl_openni_grabber pcl_openni_grabber.cpp)
target_link_libraries (pcl_openni_grabber ${PCL_LIBRARIES})
环境变量PCL_INCLUDE_DIRS包含:
/usr/include/pcl-1.5
现在经过2个小时的工作来了解问题后,我在命令find_package()中找到了它。在实践中,当我运行“cmake ..”时,它返回错误的pcl库(点云库)路径。确实这是“cmake ..”的输出:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- checking for module 'eigen3'
-- found eigen3, version 3.0.5
-- Found eigen: /usr/include/eigen3
-- Boost version: 1.46.1
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- iostreams
-- checking for module 'flann'
-- found flann, version 1.7.1
-- Found Flann: /opt/ros/fuerte/lib/libflann_cpp_s.a
-- checking for module 'openni-dev'
-- found openni-dev, version 1.5.2.23~precise
-- Found openni: /usr/lib/libOpenNI.so
-- Found libusb-1.0: /usr/include
-- Found qhull: /usr/lib/libqhull.so
-- looking for PCL_COMMON
-- Found PCL_COMMON: /opt/ros/fuerte/lib/libpcl_common.so
-- looking for PCL_KDTREE
-- Found PCL_KDTREE: /opt/ros/fuerte/lib/libpcl_kdtree.so
-- looking for PCL_OCTREE
-- Found PCL_OCTREE: /opt/ros/fuerte/lib/libpcl_octree.so
-- looking for PCL_SEARCH
-- Found PCL_SEARCH: /opt/ros/fuerte/lib/libpcl_search.so
-- looking for PCL_SAMPLE_CONSENSUS
-- Found PCL_SAMPLE_CONSENSUS: /opt/ros/fuerte/lib/libpcl_sample_consensus.so
-- looking for PCL_FILTERS
-- Found PCL_FILTERS: /opt/ros/fuerte/lib/libpcl_filters.so
-- looking for PCL_TRACKING
-- Found PCL_TRACKING: /opt/ros/fuerte/lib/libpcl_tracking.so
-- looking for PCL_IO
-- Found PCL_IO: /opt/ros/fuerte/lib/libpcl_io.so
-- looking for PCL_FEATURES
-- Found PCL_FEATURES: /opt/ros/fuerte/lib/libpcl_features.so
-- looking for PCL_REGISTRATION
-- Found PCL_REGISTRATION: /opt/ros/fuerte/lib/libpcl_registration.so
-- looking for PCL_SEGMENTATION
-- Found PCL_SEGMENTATION: /opt/ros/fuerte/lib/libpcl_segmentation.so
-- looking for PCL_SURFACE
-- Found PCL_SURFACE: /opt/ros/fuerte/lib/libpcl_surface.so
-- looking for PCL_VISUALIZATION
-- Found PCL_VISUALIZATION: /opt/ros/fuerte/lib/libpcl_visualization.so
-- looking for PCL_KEYPOINTS
-- Found PCL_KEYPOINTS: /opt/ros/fuerte/lib/libpcl_keypoints.so
-- Found PCL: /usr/lib/libboost_system-mt.so;/usr/lib/libboost_filesystem-mt.so;/usr/lib/libboost_thread-mt.so;pthread;/usr/lib/libboost_date_time-mt.so;/usr/lib/libboost_iostreams-mt.so;optimized;/opt/ros/fuerte/lib/libpcl_common.so;debug;/opt/ros/fuerte/lib/libpcl_common.so;optimized;/opt/ros/fuerte/lib/libflann_cpp_s.a;debug;/opt/ros/fuerte/lib/libflann_cpp_s-gd.a;optimized;/opt/ros/fuerte/lib/libpcl_kdtree.so;debug;/opt/ros/fuerte/lib/libpcl_kdtree.so;optimized;/opt/ros/fuerte/lib/libpcl_octree.so;debug;/opt/ros/fuerte/lib/libpcl_octree.so;optimized;/opt/ros/fuerte/lib/libpcl_search.so;debug;/opt/ros/fuerte/lib/libpcl_search.so;optimized;/opt/ros/fuerte/lib/libpcl_sample_consensus.so;debug;/opt/ros/fuerte/lib/libpcl_sample_consensus.so;optimized;/opt/ros/fuerte/lib/libpcl_filters.so;debug;/opt/ros/fuerte/lib/libpcl_filters.so;optimized;/opt/ros/fuerte/lib/libpcl_tracking.so;debug;/opt/ros/fuerte/lib/libpcl_tracking.so;/usr/lib/libOpenNI.so;vtkCommon;vtkRendering;vtkHybrid;optimized;/opt/ros/fuerte/lib/libpcl_io.so;debug;/opt/ros/fuerte/lib/libpcl_io.so;optimized;/opt/ros/fuerte/lib/libpcl_features.so;debug;/opt/ros/fuerte/lib/libpcl_features.so;optimized;/opt/ros/fuerte/lib/libpcl_registration.so;debug;/opt/ros/fuerte/lib/libpcl_registration.so;optimized;/opt/ros/fuerte/lib/libpcl_segmentation.so;debug;/opt/ros/fuerte/lib/libpcl_segmentation.so;optimized;/usr/lib/libqhull.so;debug;/usr/lib/libqhull.so;optimized;/opt/ros/fuerte/lib/libpcl_surface.so;debug;/opt/ros/fuerte/lib/libpcl_surface.so;optimized;/opt/ros/fuerte/lib/libpcl_visualization.so;debug;/opt/ros/fuerte/lib/libpcl_visualization.so;optimized;/opt/ros/fuerte/lib/libpcl_keypoints.so;debug;/opt/ros/fuerte/lib/libpcl_keypoints.so (Required is at least version "1.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jacopo/dev/university/prova/build
如您所见,它返回通过Synaptic Package Manager在“/ opt / ros”目录上安装的特定ros(Robot操作系统)包的pcl库的路径。正确的pcl库和包含在“/usr/include/pcl.1.5”和“/ usr / lib”中。
卸载ros时,find_package返回正确的路径,我可以毫无问题地编译和构建。但是因为我需要大学的ros,同时我需要cmake,我怎么能让cmake工作安装ros?有什么想法吗?
答案 0 :(得分:8)
您可以在find_package
命令中微调搜索路径:
find_package(PCL 1.2 REQUIRED PATHS /usr NO_DEFAULT_PATH)
这可能有点蛮力;当CMake搜索包时,你可以找到一种更好的方法来排除/opt
。
顺便说一句,你可能不应该使用link_directories
。文档说明了为什么通常不需要它。