失败!Nvidia TX2安装Qt6 和qtCreator7 手把手一步步
千万不要想在TX2上安装QT6!
XCB缺失几乎无解,如果有大佬可以指导一下
最开始准备使用交叉编译的方案给TX2写程序。因为台式机总是会比TX2快。
在粗浅了解和JetSon论坛上的一些消息后还是决定在TX2上安装完整的Qt Creator。
考虑到目前QT6早已推出并且和主机开发环境匹配,选择安装 Qt6。对Qt5有需求的同志、同学请找其他博客,更加清晰简单。
本博客采用编译的方法在TX2上安装Qt6
1 获取Qt6的完成源码包
1.1 注册和获取Qt开发账号
无非就是输入邮箱进行注册、绑定手机号,忽略不谈。
1.2 找到Qt官网下载源码
1.2.1 下载页面
1.2.2 选择开源版本
其他版本没有试,一来要花钱,二么这次就是冲着编译去的。
拉到最下面获取源码
选择查看其他版本 不使用网页推荐的
一定不要直接下载,网页并不知道我们是ARM64位处理器的,下下来会是x64的安装包。
选择下载离线包
同上不要直接选择网页推荐的。
直接选择集成包
如果是Qt老手可以选择下面分包。
下载完成
名称类似qt-everywhere-src-x.x.x.tar.xz
安装Qt
解压缩略去,tx2是图像化界面直接鼠标点点就好。
查看安装要求
以后的版本可能不太一样。
这里有个巨坑
一定要取/qtbase/src/plugins/platforms/xcb看一眼readme
咱就是说,如果xcb因为这个原因没有安装成功,platforms下不会生成libqxcb.so的,既然这么重要,居然没有加入install -all的readme中,也是逆天。
安装前置/
更新Cmake
查看tx2cmake版本
cmake --version
如果符合要求 camke>=3.18 不用管,否则要安装新版,比如我。
使用snap安装cmake至最新版本,注意一定要加classic,不然它不让安装
sudo snap install cmake --classic
cmake安装完毕。
查看版本
cmake --version
**注意:**这里一定要确认cmake版本,如果出现发现cmake无法更新,请先卸载原本的cmake,再通过snap安装
卸载cmake方法:
sudo apt remove --purge cmake
hash -r
更新GCC
千万不要选择过高的GCC版本,有巨坑在最后补充。
查看要求只需要编译器能够支持C++17的标准库即可。
新刷好的TX2的gcc版本是gcc7
查一下支持,我们只需要选择gcc8,我们可以把gcc,g++都装了
//安装gcc8,g++8
sudo apt-get install gcc-8
sudo apt-get install g++-8
//使用默认优先级的方法设置默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 100
sudo update-alternatives --config g++
//检查版本设置正确
gcc -v
g++ -v
如此C++编译器安装完毕
更换python版本
TX2的默认python是2.x的,这里强烈推荐使用3.6.
具体操作和gcc差不多不重复
安装perl
没啥坑,安装然后验证一下就好了
sudo apt install perl
perl -v
安装libxcb
强烈推荐去下载xcb的源码
https://xcb.freedesktop.org/
后者依赖前者,所以对应相同版本的两个都要下载
各自解压后安装
sudo ./configure
sudo make -j4
sudo make install
编译
看readme.md中的内容开始编译
选择自己喜欢的目录,我喜欢放在opt下面
./configure -prefix /opt/Qt6
如此makefile文件生成出来了。
但是直接make,会发生错误,有知道的同学、同志可以告诉我为什么
这里使用cmake --build命令编译。但是千万不用使用parallel并行编译有坑。
//不用使用
cmake --build . --parallel
//老老实实基础编译
cmake --build .
Qt安装
因为我们前面通过configure配置过安装目录了,直接安装即可
sudo cmake --install .
第一次超过15%,一般都是没问题,如果后面卡了,多试几次。在15%前面卡了的话,看下下面的踩坑,可能有解决。
配置环境变量
sudo gedit ~/.bashrc
写入以下内容
export QTDIR=/data/opt/Qt6
export PATH=$QTDIR/bin
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
其中QTDIR是我Qt6的安装目录
刷新启用环境变量
. .bashrc
验证下环境变量配置成功
qmake -v
Qt Creator
需要编译器的可以安装
前往之前下载qt源码的地方下载qtcreator的源码
解压后编译
生成makefile
并且指定最终的安装目录
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/data/opt/qtcreator7
编译
make
安装到特定目录
其实用之前cmake阶段的指定目录不需要在这里重新定目录,我自己编的时候上面忘记加了,问题不大。
sudo make install DESTDIR= /data/opt/qtcreator7
使用
qtcretor并不是必需的。完全可以在windows下写项目然后传去Tx2
生成项目文件
qmake -project
通过.pro文件生成makefile
qmake test2.pro
同文件夹下直接make生成可执行文件
make
直接使用
./test2
踩坑
gcc版本过高
最开始使用了gcc-11。虽然满足要求,但是出现如下错误。
大致的源码内容是
const chr16_t dummySubject = 0;
//这里取这个静态变量的地址会直接报错
&dummySubject;
咨询了一下研究过C++的师兄,他的建议是谨慎选择C++编译器的版本和供应商。比较乱而且坑很多。
并行编译
问题还是TX2的ARM64_v8太弱了。后者需要的内容,前者半天都没编译成功。
而且在使用 --parallel指令之后,虽然很快,但是会吃满资源,导致VNC和SSH难以连接上TX2,让我们对TX2发生了啥一无所知。
容量问题
按理说这个本不该是问题,偏偏发生了。TX2自带的32G容量根本不够。
如果有QT老手能够做到部分编译就不会有这个问题。如果要求不高,直接安装qtbase应该也能满足一些要求。
申请块固态吧,各位。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b1db6271ece45cca9dad48f62596e2a.png
装到一半吃了10个G
环境变量配置
本来按步给第二台TX2安装应该是顺风顺水的事,环境变量配置的时候发现原本就有一些内容,甚至导致基础的bash比如gedit失效。
千万不要慌
先使用下面这行使之前配置的环境变量失效,再重新写
export PATH=/bin:/usr/bin:/usr/sbin:$PATH
改成类似下面的写法:
然后再使用. .bashrc命令就好了
xcb缺失
使用qtcreator5
使用qtcreator7
libqxcb.so 缺失。原本这个文件应该再plugins/platforms下,如果没有检查安装前置中的libxcb的安装流程。
但是既然它没有只能自己编译。
就一定要单个模块进行编译了。
杂七杂八的问题
一般如此操作后,几乎都可以安装
如果不行。每行没加sudo的都加个sudo
甚至
添加如下环境变量,再看看哪里有问题。
export QT_DEBUG_PLUGINS=1