文章目录
编译PCL
1.默认已安装的一些命令工具
——如:git(用于从github上下载源码),cmake(c++项目构建),cmake-gui(cmake的一个图形界面)
2.安装依赖项
sudo apt update
sudo apt install build-essential linux-libc-dev
sudo apt install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt install mpi-default-dev openmpi-bin openmpi-common
sudo apt install libflann-dev
sudo apt install libeigen3-dev
# sudo apt install libboost-all-dev
# sudo apt install libvtk5.10-qt4 libvtk5.10 libvtk5-dev
sudo apt install libqhull* libgtest-dev
sudo apt install freeglut3-dev pkg-config
sudo apt install libxmu-dev libxi-dev
sudo apt install mono-complete
sudo apt install openjdk-8-jdk openjdk-8-jre
以上依赖项安装参考这篇博客,但是注意到我这里注释掉了libboost-all-dev的安装,因为我的机器上安装boost库失败,所以我是直接从官网下载源码然后编译安装的,参考以下;我也没有安装成qt与vtk,这两个我也是从源码编译安装。
3.源码下载与编译
我编译的是pcl1.10版本,其中需要由源码编译安装的在下面提供了下载,直接可安装的提供了安装指令(其中最低版本指的是pcl1.10.0版本的CMakeLists.txt中指定的各个依赖库的最低版本):
库名 | 最低版本 | 百度云下载 | 官网下载 | 安装指令 |
---|---|---|---|---|
Eigen | 3.1 | 不需要 | 不需要 | sudo apt install libeigen3-dev |
FLANN | 1.7.0 | 不需要 | 不需要 | sudo apt install libflann-dev |
qhull | 无版本要求 | 不需要 | 不需要 | sudo apt install libqhull* |
boost | 未知 | boost1.6.5,提取码:ugb4 | 官网下载 | - |
Qt | 5 | Qt 5.10.1版本,提取码:zerh;或所有历史版本下载 | 官网下载 | - |
VTK | 6.2 | VTK源码7.1.1,提取码:gaje | 官网下载 | - |
PCL | 1.10.0 | pcl_1.10.0源码,提取码:8hbu | 官网下载 | - |
3.1.boost库安装
解压安装包后进入解压后目录
执行`./bootstrap.sh`进行准备工作
执行`./b2`进行编译
执行`sudo ./b2 install`安装编译好的boost库
3.2.qt5库安装
安装时直接运行下载的.run
文件即可,注意直接运行是安装在主目录下新建的一个Qt安装目录,如果是sudo ./qt-opensource-linux-x64-5.10.1.run
,则会安装在/opt
下的新建的Qt安装目录下。运行.run
文件出现安装向导,全选所有组件即可(也可只选择自己需要的部分)。
3.3.vtk库编译
以下步骤是编译8.2.0版本的:但是因为编译成的8.2.0版本vtk在之后编译pcl1.10总是出问题,貌似是8.2.0不向前兼容,部分旧的用法不支持了。所以重新编译7.1.1版本,步骤应该大同小异。
解压后,使用cmake图形界面配置生成VTK项目,首先指定源码路径与生成路径。将Advance选项勾选上然后点击configure,生成器使用Unix Makefiles,使用本地编译器。
=>第一次configure之后,确认BUILD_SHARED_LIBS勾上,这样编译的是共享库而不是静态库;
=>确认CMAKE_BUILD_TYPE为release版本,因为我电脑上安装的其他第三方库都是release版(编译debug版得到的库可用于调试,release版的无法调试;如果想要编译debug版也可以,但是链接到其他依赖的第三方库的时候使用的也得是第三方库的debug版,这个设置起来可能还比较麻烦);
=>确定选上VTK_GROUP_ENABLE_QT,这样可以在Qt中使用VTK
=>此外,在编译7.1.1的时候还有一个VTK_RENDERING_BACKEND可选,选择OpenGL不要选OpenGL2
关于BUILD_TESTING:我编译VTK的时候出了好几次错,30%几,40%几,50%几编译出错终止了,我猜测可能与BUILD_TESTING有关,因为根据这篇博客,如果BUILD_TESTING的话,需要下载vtkdata数据,而如果网络不好,下载超时则会导致后续编译的出错。所以我把这个选项关了,不编译测试代码。
=>点击configure继续。上一步VTK_GROUP_ENABLE_QT选了,这一步可能需要配置Qt的路径,根据这篇博客地址要精确到Qt5Config.cmake所在文件夹
=>然后configure之后需要进一步确认更多的Qt路径,基本上都是对的,直接cofigure
如果出现以下错误,可以直接忽略该错误。
=>configure到没有标红选项后,generate生成项目。
=>生成完毕后进入构建目录,执行make -j8
(使用8线程编译当前生成项目),即完成编译。之后是安装VTK库,参考下一节。安装完了VTK库然后编译pcl库。
3.4.pcl库编译
- 通过cmake-gui配置生成项目。步骤与vtk差不多,需要指定一些库的目录。因为非常多的目录需要指定,而我具体也不是非常清楚哪些必须哪些非必须,所以我只指定了以下目录(需要指定相应库的cmake配置目录,一般该目录下有
库名.cmake
类似这样的名称):- flann_DIR:/usr/lib
- OPENNI_INCLUDE_DIR:/usr/include/ni
- OPENNI_LIBRARY:/usr/lib/libOpenNI.so
- OPENNI2_INCLUDE_DIR:/usr/include/openni2
- OPENNI2_LIBRARY:/usr/lib/libOpenNI2.so
- Qt5_DIR:与编译VTK时一样
其他的保持默认的。configure之后提示vtkComonCore
之类组件的变成了CommonCore
==========>使用vtk7.1.1版本后没有再提示这个错误
- 编译
sudo make -j12
使用checkinstall打包安装源码编译生成的库
使用checkinstall安装从源码编译的库,可以方便库的管理以及使得以后库的卸载变得简单。checkinstall使用方法也很简单,比如安装VTK库(现已改为编译安装VTK7.1.1版本):
- 在上面vtk构建目录下编译完了之后执行
sudo checkinstall
,安装编译好的库并打包 - checkinstall执行过程中可能会提示设置一些关于该软件包的信息,对于大部分的选择题,直接enter就可以,对于以下填空题,按照打包的库的信息进行填写,比如该打包软件的名称、说明、版本号、以及依赖项(Requires)等一般需要填写。
- 执行完毕后该软件就被安装到了系统上,且在当前目录下会生成一个
.deb
的软件安装包,下次再要安装或者需要给别人安装只需要sudo apt install ./this_deb_file.deb
一点问题:非常奇怪的是我这里编译打包的是vtk8.2.0版本,但是在头文件目录与库目录里都是8.9,不知道为什么
- 打包pcl库也是一样,更改软件包名称、说明、版本号以及填写如下依赖项(根据之前安装步骤里手动安装的依赖项来定):
build-essential,linux-libc-dev,libusb-1.0-0-dev,libusb-dev,libudev-dev,mpi-default-dev,openmpi-bin,openmpi-common,libflann-dev,libeigen3-dev,libqhull*,libgtest-dev,freeglut3-dev,pkg-config,libxmu-dev,libxi-dev,mono-complete,openjdk-8-jdk,openjdk-8-jre,libopenni-dev,libopenni2-dev
如果想要更改打包好的deb包信息,可以使用dpkg
命令,参考
Qt Creator配置与测试pcl库
- 配置
新建PCL.pri文件,写入如下内容:
//添加头文件路径
INCLUDEPATH += /usr/include/eigen3 //Eigen
INCLUDEPATH += /usr/local/include //boost
INCLUDEPATH += /usr/local/include/vtk-7.1 //vtk
//INCLUDEPATH += /usr/include //flann,this path should not be added,lest it cause error
INCLUDEPATH += /usr/local/include/pcl-1.10
//添加需要链接的库
LIBS += /usr/lib/x86_64-linux-gnu/libflann*.so
LIBS += /usr/local/lib/libboost_*.so
LIBS += /usr/local/lib/libvtk*.so
LIBS += /usr/local/lib/libpcl_*.so
然后在每一个使用PCL库的项目下添加该文件,并在.pro
文件中include(PCL.pri)
即可。
在Ubuntu上使用PCL库貌似要比我之前尝试的在windows下智能提示要灵活点,不那么卡,但也有一点点卡。
- 测试:代码略
- 另外一点有意思的是,在ubuntu下的Qt Creator中竟然可以使用QVTKWidget。这玩意我在windows下怎么也配置不成,在ubuntu里一下就OK了,这个之后补个博客