安装QT 5.8.0 、PCL 1.8.0

1.安装QT镜像

1.1 下载安装文件 

1.2 编译 

2 安装点云 

2.1 下载源码

2.2 安装依赖库 

3 安装PCL 1.8.0

4 其他一些库的安装

4.1 安装OpenMesh

4.2 安装aravis-0.5.7

4.3 安装cholmod

5 通常情况下的安装方法

6 出现Killed (Program Cc1plus) 

7 问题集成(Q&A)


0.0用uname -a查看架构

ubuntu@tegra-ubuntu:~$ uname -a

Linux tegra-ubuntu 4.4.38-tegra #1 SMP PREEMPT Thu Jul20 00:41:06 PDT 2017 aarch64 aarch64 aarch64 GNU/Linux

0.1源码文件夹内的cmake可以查看依赖的版本号

1.安装QT镜像

1.1下载安装文件

http://master.qt.io/official_releases/qt/5.8/5.8.0/single/下载:

qt-everywhere-opensource-src-5.8.0.tar.gz(everywhere是编译在不同架构上)

前期准备:可能需要一个大于20G的u盘用来编译源码,讲u盘格式化成ext4用来存源码,这里使用的是5.8.0的qt库。

1.2编译

如果不使用cmake-gui编译,可以用命令行编译

$ cd qt-everywhere-source-5.8.0

#跳过了wayland的编译,因为出的问题太多了

./configure -prefix /usr/local/qt5.8 -opensource-nomake tests-nomake examples –skipwayland

编译并安装

$ make –j4

$ sudo make install

可以看见编译的U盘挂载在/dev/sda1,已经使用了12G的容量

查看U盘空间

具体QT编译问题参考后半部分(Q&A)

2安装点云库

可参考如下

·参考:http://www.pointclouds.org/documentation/tutorials/compiling_pcl_posix.php

·参考:http://blog.csdn.net/linkageworld/article/details/52846555

2.1下载源码

过程->安装QT库->安装VTK的依赖库->安装VTK 8.0->安装PCL1.8的依赖库->安装PCL->完成

VTK 8.0下载source源码https://www.vtk.org/download/

PCL 1.8.0下载source源码https://github.com/PointCloudLibrary/pcl/releases

PS:可能需要重新选择QT5.8.0路径,因为可能默认的是系统版本的QT5.5.1,修改成如下QT5.8.0的路径:


qmake时的路径

PS:PCL依赖库的版本查询可以在pcl源码文件夹的cmake文件夹里面查看


PCL文件夹查看依赖库

2.2安装依赖库

·参考:http://www.cnblogs.com/vanwoos/p/5347673.html

部分依赖库可使用ubuntu自带apt-get命令进行安装(安装前使用sudo

apt-get update和sudo apt-get upgrade更新软件库)

安装flann

$ sudo apt-get install -y libflann-dev

安装boost(默认1.58)

$ sudo apt-get install libboost-all-dev

安装PCAP

$ sudo apt-get install libpcap-dev

安装libusb

$ sudo apt-get install libusb*

安装metslib

可能要去metslib官网下载metslib-0.5.3.tar.gz进行安装

安装Qhull

可下载新版安装https://launchpad.net/ubuntu/+source/qhull

$ sudo apt-get install libqhull-dev

安装VTK(编译1小时,安装半小时)

·参考:http://blog.csdn.net/fanhenghui/article/details/52025846

安装VTK的时候可能会出现找不到UiPlugin_dir(因此要安装QT5.8.0)

找不到Qt5UiPlugin_DIR

安装完成后,可指定Qt5UiPlugin文件夹路径

Qt5UiPlugin路径

3安装PCL 1.8.0

使用Cmake-gui指定source文件夹(PCL文件夹),在pcl文件夹下创建build文件夹(用来配置),点击Grouped打钩,分组显示,然后修改新的Qt5.8.0的cmake文件夹路径


Qmake使用

4其他一些库的安装

4.1安装OpenMesh

用git下载,自己编译安装

$ git clone https://www.graphics.rwth-aachen.de:9000/OpenMesh/OpenMesh.git

可能需要修改Qt5的文件夹路径:

Qt5的文件夹路径

然后make,接着sudo make install编译和安装

4.2安装aravis-0.5.7

看README.md可以知道使用./configure配置,然后是make和sudo

make install进行编译安装

4.3安装cholmod

使用apt-get安装cholmod

$ sudo apt-get install libsuitesparse-dev

头文件路径:/usr/include/suitesparse

5通常情况下的安装方法

首先,参考源码文件夹内的README.md,一般都会有安装方法和需要的依赖库以及版本信息

1.使用sudo apt-get install安装,如sudo apt-get installlibboost-1.58-dev

安装前sudo apt search搜索要安装的库或者软件是否在软件库内,如sudoapt search libboost*

2.若源码文件夹内有configure文件(如图),则可以使用./configure进行配置,接着使用make和sudo

make install进行编译和安装。安装前可以使用./configure –h查看可配置参数(如图)

configure 文件
./configure –h

3.若源码文件夹内有CMakeLists文件,可以使用cmake-gui进行编译,也可以选择用

$ sudo apt-getinstall cmake

来使用命令行对源码编译进行配置,可以创建build文件夹用来放配置之后的文件和将要编译的makefile,有了makefile就可以进行编译和安装了,还是老规矩,使用make和sudo

make install进行编译和安装。

 cmake文件
makefile文件

4.若源码文件夹内只有makefile,可直接使用make和sudo

make install进行编译和安装。

6 出现Killed (Program Cc1plus)

G++: Internal Error: Killed (Program Cc1plus)

原因是内存不足,可以查看自己的存储空间,适当在Lnux下增加临时swap空间(临时交换空间)

第一步:

$ sudo dd if=/dev/zero of=/home/swap bs=1024 count=512000

注释:of=/home/swap,放置swap的空间;

count的大小就是增加的swap空间的大小,1024就是块大小,这里是1K,所以总共空间就是bs*count=512M

已使用内存,SWAP交换内存

第二步:

$ sudo mkswap /home/swap

注释:把刚才空间格式化成格式

第三步:

$ sudo swapon /home/swap

注释:使刚才创建的swap空间

关闭空间:

$ sudo swapoff –a

注释:关闭开辟的swap空间,如果感觉不需要交换空间,可以在/home文件内把swap文件删除

·参考:http://tianshuai.github.io/blog/2013/08/26/g-plus-plus-internal-error-killed-program-cc1plus/

$ sudo dd if=/dev/zero of=/home/swap bs=1024 count=512000

$ sudo mkswap /home/swap & sudo swapon /home/swap

7问题集成(Q&A)

安装QT5的一些问题

Q:出现libxcb这种如下错误时候

libxcb

A:使用命令安装xcb的库

sudo apt-get install libxcb*

遇到找不到xkbcommon头文件的

sudo apt-get install libxkbcommon*

遇到找不到Qt5X11Extras,就安装Qt5X11Extras

sudo apt-get install qt5x11*

可能出现的问题参考下面文章

·参考:http://blog.csdn.net/situzhuge/article/details/5868148

Q:出现和libusb库有关的错误

undefined

A:官网找到libusb1.0.21,需要依赖库libudev

sudo apt-get install libudev*

Q:出现Segmentation fault错误

PS:程序访问的非法的内存,导致其被操作系统强行终止

解释的文章:

·参考:http://blog.chinaunix.net/uid-23069658-id-3959636.html


Segmentation fault错误

If it works with the latest version of pcl,but not with the older version of pcl there is probably a patch which has beenapplied to pcl between those versions which fixes it, I'd suggest lookingthere. You should also dig in with gdb and try to find the actual issue withthe memory causing the segfault.

Edit:

Looking closer, this is just a bug in PCL,there's nothing ROS releated. I removed all the ROS related code and it stillsegfaults.

PS:网上的答案是使用gdb去运行查看问题,发现boost版本和pcl版本可能有冲突,也可能是boost版本和C++11有冲突(-std=c++11)

gdb调试

0x0000007fb0fb167c in boost::math::lanczos::lanczos24m113::lanczos_sum (

z=@0x7fffffede0: 1) at/usr/include/boost/math/special_functions/lanczos.hpp:1069

1069};

A:大体上就是boost库的问题,版本是1.58,暂时未找到解决方法,网上的办法是去掉C++11支持,或者使用其他版本的boost库。

这里说一点:对于相比于JetPack3.1,JetPack3.0我觉得他的内存分配做得不是很好,经常在分配的时候没有释放掉,这也就是我在编译的时候经常ccplus进程被杀死的原因,和运行程序的时候出现“Segmetation

Fault”。

A:程序之所以会时不时的出现“Segmetation Fault”的根本原因是进程访问到了没有访问权限的地方,诸如内核区域或者其0x08048000之前的地方,或者由于要访问的内存没有经MMU进行映射所导致。而这种问题比较多的是出在malloc()之类的动态内存申请函数申请完内存,释放后,没有将指针设置为NULL,而其他地方在继续用先前申请的那块内存时,由于内存管理系统已经将其收回,所以才会出现这样的问题。良好的关于指针的使用习惯是,使用之前先判断其是否为NULL,所有已经归还给操作系统的内存,其访问指针都要及时置为NULL,防止所谓的“野指针”到处飞的情况。

推荐阅读更多精彩内容