2012-05-13 15 views
5

Utilizzo una macchina Ubuntu 12.04 e ho il seguente problema: Sto provando a compilare e creare un file C++ usando CMake, ma quando do il comando "make" dopo "cmake .." ottengo l'errore:find_package (PCL 1.2 RICHIESTO) utilizzando CMake restituisce percorso errato

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

Ora il mio CMakeLists.txt è il seguente:

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

dove l'ambiente PCL_INCLUDE_DIRS variabile contiene:

/usr/include/pcl-1.5 

Ora dopo 2 ore di lavoro per capire il problema, l'ho trovato nel comando find_package(). In pratica quando eseguo "cmake .." restituisce il percorso sbagliato alle librerie di pcl (libreria nuvola di punti). In effetti questo è l'uscita di "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 

Come si può vedere, restituisce il percorso alla libreria pcl di un particolare pacchetto di ROS (Robot Operating System) che viene installato tramite Synaptic Package Manager nella directory "/ opt/ros". La giusta libreria pcl e include sono in "/usr/include/pcl.1.5" e "/ usr/lib".

Quando si disinstalla ros, find_package restituisce i percorsi corretti e sono in grado di compilare e creare senza problemi. Ma dal momento che ho bisogno di ros per l'università e allo stesso tempo ho bisogno di cmake, come posso far funzionare cmake installando ros? Qualche idea?

risposta

7

È possibile ottimizzare il percorso di ricerca nel comando find_package:

find_package(PCL 1.2 REQUIRED PATHS /usr NO_DEFAULT_PATH) 

Questo potrebbe essere un po 'di forza bruta; potresti forse trovare un modo migliore per escludere lo /opt dalla considerazione quando CMake cerca il pacchetto.

Come parte, probabilmente non si dovrebbe usare link_directories. La documentazione indica perché di solito non è necessaria.

+0

Grazie mille Fraser, ha funzionato :) – yorsh

Problemi correlati