1.安裝QT鏡像
1.1 下載安裝文件?
1.2 編譯?
2 安裝點(diǎn)云?
2.1 下載源碼
2.2 安裝依賴庫?
3 安裝PCL 1.8.0
4 其他一些庫的安裝
4.1 安裝OpenMesh
4.2 安裝aravis-0.5.7
4.3 安裝cholmod
5 通常情況下的安裝方法
6 出現(xiàn)Killed (Program Cc1plus)?
7 問題集成(Q&A)
0.0用uname -a查看架構(gòu)
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源碼文件夾內(nèi)的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是編譯在不同架構(gòu)上)
前期準(zhǔn)備:可能需要一個大于20G的u盤用來編譯源碼腺毫,講u盤格式化成ext4用來存源碼已卷,這里使用的是5.8.0的qt庫孽鸡。
1.2編譯
如果不使用cmake-gui編譯狡赐,可以用命令行編譯
$ cd qt-everywhere-source-5.8.0
#跳過了wayland的編譯腐螟,因?yàn)槌龅膯栴}太多了
./configure -prefix /usr/local/qt5.8 -opensource-nomake tests-nomake examples –skipwayland
編譯并安裝
$ make –j4
$ sudo make install
可以看見編譯的U盤掛載在/dev/sda1愿汰,已經(jīng)使用了12G的容量
具體QT編譯問題參考后半部分(Q&A)
2安裝點(diǎn)云庫
可參考如下
·參考: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路徑,因?yàn)榭赡苣J(rèn)的是系統(tǒng)版本的QT5.5.1乐纸,修改成如下QT5.8.0的路徑:
PS:PCL依賴庫的版本查詢可以在pcl源碼文件夾的cmake文件夾里面查看
2.2安裝依賴庫
·參考:http://www.cnblogs.com/vanwoos/p/5347673.html
部分依賴庫可使用ubuntu自帶apt-get命令進(jìn)行安裝(安裝前使用sudo
apt-get update和sudo apt-get upgrade更新軟件庫)
安裝flann
$ sudo apt-get install -y libflann-dev
安裝boost(默認(rèn)1.58)
$ sudo apt-get install libboost-all-dev
安裝PCAP
$ sudo apt-get install libpcap-dev
安裝libusb
$ sudo apt-get install libusb*
安裝metslib
可能要去metslib官網(wǎng)下載metslib-0.5.3.tar.gz進(jìn)行安裝
安裝Qhull
可下載新版安裝https://launchpad.net/ubuntu/+source/qhull
$ sudo apt-get install libqhull-dev
安裝VTK(編譯1小時衬廷,安裝半小時)
·參考:http://blog.csdn.net/fanhenghui/article/details/52025846
安裝VTK的時候可能會出現(xiàn)找不到UiPlugin_dir(因此要安裝QT5.8.0)
安裝完成后,可指定Qt5UiPlugin文件夾路徑
3安裝PCL 1.8.0
使用Cmake-gui指定source文件夾(PCL文件夾)汽绢,在pcl文件夾下創(chuàng)建build文件夾(用來配置)吗跋,點(diǎn)擊Grouped打鉤,分組顯示宁昭,然后修改新的Qt5.8.0的cmake文件夾路徑
4其他一些庫的安裝
4.1安裝OpenMesh
用git下載跌宛,自己編譯安裝
$ git clone?https://www.graphics.rwth-aachen.de:9000/OpenMesh/OpenMesh.git
可能需要修改Qt5的文件夾路徑:
然后make,接著sudo make install編譯和安裝
4.2安裝aravis-0.5.7
看README.md可以知道使用./configure配置积仗,然后是make和sudo
make install進(jìn)行編譯安裝
4.3安裝cholmod
使用apt-get安裝cholmod
$ sudo apt-get install libsuitesparse-dev
頭文件路徑:/usr/include/suitesparse
5通常情況下的安裝方法
首先疆拘,參考源碼文件夾內(nèi)的README.md,一般都會有安裝方法和需要的依賴庫以及版本信息
1.使用sudo apt-get install安裝斥扛,如sudo apt-get installlibboost-1.58-dev
安裝前sudo apt search搜索要安裝的庫或者軟件是否在軟件庫內(nèi)入问,如sudoapt search libboost*
2.若源碼文件夾內(nèi)有configure文件(如圖),則可以使用./configure進(jìn)行配置稀颁,接著使用make和sudo
make install進(jìn)行編譯和安裝芬失。安裝前可以使用./configure –h查看可配置參數(shù)(如圖)
3.若源碼文件夾內(nèi)有CMakeLists文件,可以使用cmake-gui進(jìn)行編譯匾灶,也可以選擇用
$ sudo apt-getinstall cmake
來使用命令行對源碼編譯進(jìn)行配置棱烂,可以創(chuàng)建build文件夾用來放配置之后的文件和將要編譯的makefile,有了makefile就可以進(jìn)行編譯和安裝了阶女,還是老規(guī)矩颊糜,使用make和sudo
make install進(jìn)行編譯和安裝。
4.若源碼文件夾內(nèi)只有makefile秃踩,可直接使用make和sudo
make install進(jìn)行編譯和安裝衬鱼。
6?出現(xiàn)Killed (Program Cc1plus)
G++: Internal Error: Killed (Program Cc1plus)
原因是內(nèi)存不足,可以查看自己的存儲空間憔杨,適當(dāng)在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
第二步:
$ sudo mkswap /home/swap
注釋:把剛才空間格式化成格式
第三步:
$ sudo swapon /home/swap
注釋:使剛才創(chuàng)建的swap空間
關(guān)閉空間:
$ sudo swapoff –a
注釋:關(guān)閉開辟的swap空間台谢,如果感覺不需要交換空間,可以在/home文件內(nèi)把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:出現(xiàn)libxcb這種如下錯誤時候
A:使用命令安裝xcb的庫
sudo apt-get install libxcb*
遇到找不到xkbcommon頭文件的
sudo apt-get install libxkbcommon*
遇到找不到Qt5X11Extras岁经,就安裝Qt5X11Extras
sudo apt-get install qt5x11*
可能出現(xiàn)的問題參考下面文章
·參考:http://blog.csdn.net/situzhuge/article/details/5868148
Q:出現(xiàn)和libusb庫有關(guān)的錯誤
A:官網(wǎng)找到libusb1.0.21朋沮,需要依賴庫libudev
sudo apt-get install libudev*
Q:出現(xiàn)Segmentation fault錯誤
PS:程序訪問的非法的內(nèi)存,導(dǎo)致其被操作系統(tǒng)強(qiáng)行終止
解釋的文章:
·參考:http://blog.chinaunix.net/uid-23069658-id-3959636.html
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:網(wǎng)上的答案是使用gdb去運(yùn)行查看問題,發(fā)現(xiàn)boost版本和pcl版本可能有沖突缀壤,也可能是boost版本和C++11有沖突(-std=c++11)
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,暫時未找到解決方法诉位,網(wǎng)上的辦法是去掉C++11支持骑脱,或者使用其他版本的boost庫。
這里說一點(diǎn):對于相比于JetPack3.1苍糠,JetPack3.0我覺得他的內(nèi)存分配做得不是很好叁丧,經(jīng)常在分配的時候沒有釋放掉,這也就是我在編譯的時候經(jīng)常ccplus進(jìn)程被殺死的原因岳瞭,和運(yùn)行程序的時候出現(xiàn)“Segmetation
Fault”拥娄。
A:程序之所以會時不時的出現(xiàn)“Segmetation Fault”的根本原因是進(jìn)程訪問到了沒有訪問權(quán)限的地方,諸如內(nèi)核區(qū)域或者其0x08048000之前的地方瞳筏,或者由于要訪問的內(nèi)存沒有經(jīng)MMU進(jìn)行映射所導(dǎo)致稚瘾。而這種問題比較多的是出在malloc()之類的動態(tài)內(nèi)存申請函數(shù)申請完內(nèi)存,釋放后姚炕,沒有將指針設(shè)置為NULL摊欠,而其他地方在繼續(xù)用先前申請的那塊內(nèi)存時,由于內(nèi)存管理系統(tǒng)已經(jīng)將其收回柱宦,所以才會出現(xiàn)這樣的問題些椒。良好的關(guān)于指針的使用習(xí)慣是,使用之前先判斷其是否為NULL掸刊,所有已經(jīng)歸還給操作系統(tǒng)的內(nèi)存免糕,其訪問指針都要及時置為NULL,防止所謂的“野指針”到處飛的情況忧侧。