硬件:Jetson Xavier NX 套件(500G SSD)
系统:Ubuntu 20.4
g++/gcc工具链:version9.4.0 (target: aarch64-linux-gnu)
限于篇幅,将编译过程中所有问题均记录于:
编译安装Qt5.15.6 过程中遇到的问题处理集
最近项目需要在Jetson Xavier NX 套件上进行应用开发,需要选择一个QT版本编译成目标板能够运行的库。我选择了5.15.6,因为有500G的SSD,所以我是在目标板上直接编译,而非交叉编译,交叉编译请注意编译工具的配置。网上有很多例子,遇到qtwebengine qtwayland qtmultimedia qtlocation 等库编译失败就在Configure 配置中skip了,但是刚好我这个项目需要用到qtmultimedia 和 qtlocation 。所以我准备不跳过任何组件,进行全编译。
安装请参考我的 Jetson Xavier NX 套件将系统装到SSD
由于Jetson Xavier NX仅有8GB内存,交换空间默认为4GB,在编译过程中,内存几乎占满,交换空间最大需要15G以上,所以建议给交换空间再分配16G以上,我直接再分配了32G
//在根目录下创建一个名为“swapfile”交换空间文件,
//块大小bs为64MB,块的个数count为512,
//“swapfile”文件大小为64MB*512=32GB。
sudo dd if=/dev/zero of=/swapfile bs=64M count=512
//将空间格式化成swap格式 。此步需要等待已一定时间,空间越大,时间越长
sudo mkswap /swapfile
//激活swap空间,可通过free -h查看交换空间大小 ,注意,每次重启系统都需要执行激活空间。
//后面如果遇到ninja: build stopped: subcommand failed.
//make[3]: *** [Makefile.gn_run:1189: run_ninja] Error 1 基本就是空间不足导致
sudo swapon /swapfile
由于Jetson Xavier NX的Ubuntu系统将线程默认栈空间大小调整为1024KB,导致某些库无法编译通过。
//以管理员身份打开/etc/security/limits.conf
sudo vim /etc/security/limits.conf
//按G来到配置文件底部,新增两行,将线程默认栈空间大小改为10240,修改如下:
ubuntu hard stack 10240 //此处ubuntu为用户名,请参照自己的用户名进行修改
ubuntu soft stack 10240
//重启生效
reboot
使用NVIDIA原始的源、不用修改国内源
sudo apt-get install bison build-essential qt5-default
sudo apt-get install perl git gperf ruby
sudo apt-get install libclang-10-dev llvm-10*
sudo apt-get install xcb* libxcb* libx11* libxkbcommon* libxrender* libxi-dev
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev libegl1-mesa-dev freeglut* libgles* libglew*
sudo apt-get install flex libicu-dev libxslt-dev
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev
sudo apt-get install libdus* dbus*
sudo apt-get install libfontconfig1-dev fontconfig libcap-dev libxtst-dev libxext-dev
sudo apt-get install libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev
sudo apt-get install libgstreamer-gl1.0-0 libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt-get install libcups2* pulseaudio* alsa-* mesa-* systemd* system-* libgudev-1.0-dev libatspi2.0* at-spi2-* libclipper-dev
sudo apt-get install nodejs gyp ninja-build libdrm-dev
sudo apt-get install bluez* bluetooth libbluetooth*
sudo apt-get install libwayland-dev
所有操作均在“/opt/”目录下
将qt-everywhere-opensource-src-5.15.6.tar.xz源码包复制到“/opt/”目录下
//进入opt目录
cd /opt/
//创建qt5.15.6文件夹 和 qt5.15.6_aarch64 文件夹
//用于编译好后安装qt的位置
sudo mkdir qt5.15.6_aarch64
//用于解压源码和进行编译产生的中间文件存放
sudo mkdir qt5.15.6
//将源码解压到qt5.15.6,并进入该目录
sudo tar xvf qt-everywhere-src-5.15.6.tar.xz -C ./qt5.15.6/
cd ./qt5.15.6/
//网上有些例子,在这里创建build文件夹,在这个文件夹下再创建配置脚本。但是我在自动配置时,
//始终要提示未找到all necessary libraries for qpa-xcb support in QtWebEngine。
//在源码目录直接创建则不会提示
//进入源码目录,创建脚本。
cd ./qt-everywhere-src-5.15.6/
sudo vim autoConfigure.sh
将以下内容复制到 autoConfigure中,其中配置选项意思请参考qt之configure选项说明
#!/bin/sh
./configure \
-platform linux-aarch64-gnu-g++ \
-prefix /opt/qt5.15.6_aarch64 \
-confirm-license \
-opensource \
-release \
-shared \
-make libs \
-nomake examples \
-nomake tests \
-dbus \
-opengl \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-xcb \
-alsa \
-gif \
-gstreamer 1.0 \
-pulseaudio \
-fontconfig \
-system-freetype
修改脚本权限(直接全权限)
sudo chmod 777 ./autoConfigure.sh
sudo ./autoConfigure.sh
执行时间,大概需要十分钟左右。执行完成后,认真查看自己需要的模块是否已被勾选,结果显示参考我的编译安装Qt5.15.6 过程中遇到的问题处理集
sudo make -j6
由于JetsonXavierNX的CPU为6核,此处选择-j6。编译时间相当长,可以在下半时进行。
中间可能好几次因为错误被中断编译。不急不躁,我罗列出我遇到的问题以及处理办法在编译安装Qt5.15.6 过程中遇到的问题处理集中,供大家参考。
sudo make install
很神奇的是,我在安装过程中,还会进行一些库的编译,估计是我在自动配置的文件里,配置参数不完全。在安装过程中也因为错误中断安装好几次,同样将问题罗列在上述问题处理集里了
sudo apt-get install qtcreator -y
1、JetsonXavierNX编译安装Qt5.12.9
2、rpms / qt6-qtmultimedia
3、error during compiling
4、树莓派Qt系列教程30:源码方式搭建Qt开发环境
5、NVIDIA Jetson AGX Xavier安装pyQT