编译安装PCL点云库
官网及文档
源码官网:https://github.com/PointCloudLibrary/pcl
安装方式
方式一:编译源码安装(最稳妥)
准备编译环境及工具
sudo apt-get update
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install libpcap-dev
sudo apt-get install libflann1.9 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install vtk6 libvtk6.3 libvtk6-dev libvtk6.3-qt libvtk6-qt-dev
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install libopenni-dev libopenni2-dev
sudo apt-get install qt-sdk openjdk-8-jdk openjdk-8-jre
编译PCL(PointCloudLibrary)
下载源码:
git clone https://gitee.com/mirrors/pcl.git
进入下载后的pcl目录,创建并进入release目录,执行编译:
cd pcl
切换到指定版本v1.9.1再编译
git checkout pcl-1.9.1
创建目录
mkdir release
进入目录
cd release
配置cmake
cmake -DCMAKE_BUILD_TYPE=None \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_GPU=ON \
-DBUILD_apps=ON \
-DBUILD_simulation=ON \
-DBUILD_examples=ON ..
进行编译
make -j8
安装
编译可能比较久,等他编完后,执行安装:
sudo make install
测试
测试是否成功,打开窗口看到logo点云即为成功安装
pcl_viewer ../test/pcl_logo.pcd
方式二:在线安装(100M下载,释放后1G)
sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
sudo apt-get update
sudo apt-get install libpcl-dev # 或 libpcl-all
问题及处理
问题:没有pcl_viewer
解决:
说明编译的时候,cmake参数有误,或install有问题,可以检查参数后重新执行cmake make
或通过以下命令安装 bash sudo apt install pcl-tools
问题:加载pcd文件异常
描述:执行pcl::io::loadPCDFile(“./assets/xxxx.pcd”, *cloud) == -1),控制台报错
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
解决:
此时,很可能是eigen3有问题,从此处下载离线版eigen3库
http://bitbucket.org/eigen/eigen/get/3.2.0.tar.bz2
http://eigen.tuxfamily.org/index.php?title=Main_Page 在该网站中,可以下载任意版本对应的文件,本例下载了Eigen 3.2.0. tar.bz2 格式压缩文件。 文件名:eigen-eigen-ffa86ffb5570.tar.bz2
执行如下操作:
卸载原有eigen3:
sudo apt-get remove libeigen3-dev --purge
重装eigen3
解压
tar -jxvf eigen3_3.2.0.orig.tar.bz2
重命名
mv eigen-eigen-ffa86ffb5570/ eigen3
复制到/usr/local/include/
sudo cp -r eigen3 /usr/local/include/eigen3
复制到/usr/include/
sudo cp -r eigen3 /usr/include/eigen3
问题:metslib cmake 错误
no metslib found.
解决:
wget https://www.coin-or.org/download/source/metslib/metslib-0.5.3.tgz
tar xzvf metslib-0.5.3.tgz
cd metslib-0.5.3
./configure
make
sudo make install
问题:libpq.so和libvtkIO.so错误
[ 13%] Built target pcl_pcd_convert_NaN_nan
[ 13%] Linking CXX executable …/…/bin/pcl_pcd_introduce_nan
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to SSL_get_peer_certificate@OPENSSL_1.0.0' /usr/lib/libvtkIO.so.5.10.1: undefined reference to
TIFFReadDirectory@LIBTIFF_4.0’
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to CRYPTO_num_locks@OPENSSL_1.0.0' //usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to
SSL_get_current_compression@OPENSSL_1.0.0’
//usr/lib/x86_64-linux-gnu/libpq.so.5: undefined reference to `SSL_CTX_free@OPENSSL_1.0.0’
解决:
sudo apt-get remove libpq5
sudo apt-get install libpq-dev
问题:make时libproj.so
make[2]: *** No rule to make target ‘/usr/lib/x86_64-linux-gnu/libproj.so’, needed by ‘lib/libpcl_io.so.1.9.1.99’。 停止。CMakeFiles/Makefile2:499: recipe for target ‘io/CMakeFiles/pcl_io.dir/all’ failed
解决:
建立软连接, 终端中输入:
sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/x86_64-linux-gnu/libproj.so
问题:libpng16.so错误
//home/ty/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9’
collect2: error: ld returned 1 exit status
src/CMakeFiles/pcl_test.dir/build.make:253: recipe for target ‘…/build/debug/bin/pcl_test’ failed
make[3]: *** […/build/debug/bin/pcl_test] Error 1
解决:
cd /usr/lib/x86_64-linux-gnu
sudo ln -sf ~/anaconda/lib/libpng16.so.16 libpng16.so.16
cd /usr/lib/
sudo ln -sf ~/anaconda/lib/libpng16.so.16 libpng16.so.16
sudo ldconfig
或
conda remove libpng
sudo apt-get install libpng16-16 --reinstall
实在不行编译安装源码:
wget https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz
tar -zxvf libpng-1.6.37.tar.gz
cd libpng-1.6.37/
./configure --prefix=/usr/local/
sudo make && make install
问题:/usr/bin/ld: cannot find -lxxx
以`/usr/bin/ld: cannot find -lvtkproj4为例
解决:
原因1:libvtkproj4.so的链接不正确或没有链接,注意规则是libxxx.so
cd /usr/lib
ll | grep -i vtkproj4
输出
lrwxrwxrwx 1 root root 21 4月 5 2016 libvtkproj4.so.5.10 -> libvtkproj4.so.5.10.1
-rw-r–r-- 1 root root 312320 4月 5 2016 libvtkproj4.so.5.10.1
说明没有libvtkproj4.so链接,则执行以下命令即可:
sudo ln -s libvtkproj4.so.5.10 libvtkproj4.so
原因2:系统缺少对应的so库,即/usr/lib下找不到类似的so
则进行搜索并安装
sudo apt-cache search libvtkproj4-dev
sudo apt-get install libvtkproj4-dev