2012-05-13 34 views
5

Tôi đang sử dụng máy tính Ubuntu 12.04 và có vấn đề sau: Tôi đang cố gắng biên dịch và xây dựng tệp C++ bằng CMake, nhưng khi tôi đưa ra lệnh "làm" sau khi "cmake .." tôi nhận được lỗi:find_package (PCL 1.2 YÊU CẦU) sử dụng CMake trả về đường dẫn sai

pcl_openni_grabber.cpp:2:29: fatal error: pcl/point_cloud.h: No such file or directory compilation terminated.

Bây giờ CMakeLists.txt của tôi nó như sau:

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}) 

nơi mà môi trường PCL_INCLUDE_DIRS biến chứa:

/usr/include/pcl-1.5 

Bây giờ sau 2 giờ làm việc để hiểu được vấn đề, tôi tìm thấy nó trong lệnh find_package(). Trong thực tế khi tôi chạy "cmake .." nó trả về đường dẫn sai cho các thư viện của pcl (thư viện đám mây điểm). Quả thực đây là sản phẩm của "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 

Như bạn thấy, nó sẽ trả về đường dẫn đến thư viện PCL của một gói đặc biệt của ros (Robot Hệ điều hành) được cài đặt thông qua Synaptic Package Manager trên thư mục "/ opt/ros". Thư viện pcl đúng và bao gồm trong "/usr/include/pcl.1.5" và "/ usr/lib".

Khi gỡ cài đặt hoa hồng, find_package trả về đúng đường dẫn và tôi có thể biên dịch và tạo mà không gặp sự cố. Nhưng kể từ khi tôi cần ros cho trường đại học và đồng thời tôi cần cmake, làm thế nào tôi có thể có cmake làm việc có cài đặt ros? Bất kỳ ý tưởng?

Trả lời

7

Bạn có thể tinh chỉnh các đường dẫn tìm kiếm trong lệnh find_package:

find_package(PCL 1.2 REQUIRED PATHS /usr NO_DEFAULT_PATH) 

Đây có thể là một chút brute-force; bạn có thể tìm cách tốt hơn để loại trừ /opt khỏi xem xét khi CMake tìm kiếm gói.

Là một sang một bên, có thể bạn không nên sử dụng link_directories. Tài liệu chỉ ra lý do tại sao nó thường không cần thiết.

+0

Cảm ơn rất nhiều Fraser, nó đã hoạt động :) – yorsh

Các vấn đề liên quan