sudo apt install libpcl-dev
注意:若是在Ubuntu14.04下安裝的是libpcl-all,通常狀況下在Ubuntu的軟件倉庫裏首選帶dev後綴的和什麼後綴都不帶的庫版本。這裏安裝的是PCL1.7版本python
最終安裝到的路徑爲:linux
/usr/include
/usr/lib/x86_64-linux-gnu
因此實際上這個庫安裝後,只有一些.h
文件和在庫文件目錄中的.so
文件。ios
CMakeLists.txt中:git
find_package(PCL REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) 並在最後的target_link_libraries()命令中加入${PCL_LIBRARIES}
注意:只要find_package可以找到庫,那必定會產生以下幾個變量:github
PCL_INCLUDE_DIRS
:存儲的是PCL庫全部的頭文件所在的目錄 PCL_LIBRARY_DIRS
:存儲的是PCL庫全部的庫文件(共享庫或者靜態庫或者源文件)所在的目錄 PCL_LIBRARIES
:存儲的是PCL庫每一個庫文件(即共享庫或者靜態庫或者源文件)的詳細位置(包括文件名)PCL_FOUND
:存儲是否找到了這個PCK庫PCL_DEFINITIONS
:注意:include_directories做用是添加一個新的目錄到cmake的頭文件搜索目錄裏。
link_directories做用是添加一個新的目錄到cmake的庫文件搜索目錄裏。然而不少庫都喜歡把庫文件放在/usr/lib/x86_64-linux-gnu
這個文件夾下函數
sudo apt install libvtk6-dev libvtk6.2
VTK庫在cmake中的使用參見pcl庫的使用,幾乎如出一轍。
注意:因爲VTK庫與PCL庫是配套的,可是大於等於7.1的VTK庫會與PCK庫不兼容,其體如今InsertTupleValue
等找不到。故最好安裝小於7.1的版本。具體請參見VTK版本不兼容現象
另外注意在應用商店裏python-vtk包和libpcl-dev包前後安裝的時候會相互卸載沒用到的組件,致使一個安裝了,同時另外一個被卸載了,請務必注意。ui
Eigen庫的安裝,Eigen庫是一個只有頭文件沒有庫文件的庫,因此使用的時候只須要include_directories
導入頭文件目錄便可。code
與上述相似,可是注意的是在Ubuntu16.04中,cmake不能自動找到Boost,須要先設置BOOST_ROOT
get
其cmakelists.txt文件以下:it
cmake_minimum_required(VERSION 3.9) project(pcldemo) set(CMAKE_CXX_STANDARD 17) find_package(Eigen3 REQUIRED) include_directories("/usr/include/eigen3")#很奇怪的是Eigen只有頭文件沒有庫文件,因此只能經過這種方式導入便可使用Eigen # pcl find_package( PCL REQUIRED) include_directories( ${PCL_INCLUDE_DIRS} ) link_directories(${PCL_LIBRARY_DIRS}) #Boost set(BOOST_ROOT "/usr/local/boost") #這個是我本身加的,由於原來Findboost.cmake提示找不到boost庫 find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) #VTK find_package(VTK REQUIRED) include_directories(${VTK_INCLUDE_DIRS}) link_directories(${VTK_LIBRARY_DIRS}) add_executable(pcldemo main.cpp) target_link_libraries(pcldemo "/usr/lib/x86_64-linux-gnu/libpcl_visualization.so.1.7.2" libboost_system.so libboost_filesystem.so ${VTK_LIBRARIES} )
尚待解決的問題:
最棒target_link_libraries的時候,visualization.so必需要用全路徑,直接寫名字卻不行,尚待研究。其次,對於PCL庫,直接在target_link_libraries中用${PCL_LIBRARIES}的調用卻不行,尚待研究。
#include <iostream> #include <pcl/visualization/cloud_viewer.h> #include <pcl/io/pcd_io.h> int main(int argc, char* argv[]){ pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud(new pcl::PointCloud<pcl::PointXYZRGB>); pcl::visualization::CloudViewer viewer("Simple Cloud Viewer"); viewer.showCloud(cloud); while (!viewer.wasStopped()) { } }
注意,網上有些demo是錯誤的,就在於對cloud的定義上,少了一個ConstPtr子類,我就爲這個問題折騰了好幾天,果真不能篤信權威啊。