临海网站开发公司电话,怎么学装修设计,wordpress 手机 菜单,中国最新军事新闻 新闻最近公司给了我一块Jetson Orin Nano的板子#xff0c;先刷了系统#xff08;1.Jetson Orin Nano Developer Kit系统刷机#xff09;又让我搭建交叉编译环境#xff0c;所以有了下面的文章
一 :Qt5.14.2交叉编译环境安装
1.准备
1.1设备环境
1.1.1 Server:
Ubuntu20.0…最近公司给了我一块Jetson Orin Nano的板子先刷了系统1.Jetson Orin Nano Developer Kit系统刷机又让我搭建交叉编译环境所以有了下面的文章
一 :Qt5.14.2交叉编译环境安装
1.准备
1.1设备环境
1.1.1 Server:
Ubuntu20.04:
Qt 源码 5.14.2
Qt 软件 5.14.2
gcc 版本 9.4.0
g 版本 9.4.0
1.1.2 Jetson Orin Nano :
Ubuntu 20.04
1.2 Qt相关下载地址
1.2.1 Qt源码下载
Qt源码下载(最好下载tar.xz,tar格式可能在windows下编辑过,后期可能会出现乱码的情况)
Index of /archive/qt/5.14/5.14.2/single 1.2.2 Qt软件下载地址
https://download.qt.io/archive/qt/5.14/5.14.2/ 1.3 gcc和g安装
Ubuntu 20.04系统默认安装g和gcc版本是9.4.0如果Ubuntu系统上没有g和gcc安装命令
sudo apt-get install gcc-aarch64-linux-gnu g-aarch64-linux-gnu 安装好之后查看版本如下图
aarch64-linux-gnu-gcc -vaarch64-linux-gnu-g -v 1.4 Jetson Orin Nano Developer Kit 系统安装方法
Jetson 系统 自行安装
注意
- SDK Manager下使用的包是JetPack5.1.1(rev.1); - 使用命令行安装使用的BSP包是Jetson_Linux_R35.3.1_aarch64.tbz2 Sample Root Filesystem是Tegra_Linux_Sample-Root-Filesystem_R35.3.1_aarch64.tbz2 2.Jetson Orin Nano Developer Kit 环境准备
2.1 设置root账号密码
sudo passwd root#设置Jetson Orin Nano root的账号密码
2.2 设置ssh
开启ssh保证其它用户能够通过ssh rootip 访问开启ssh为了文件拷贝等操作。
2.3 更新资源列表
sudo apt-get update #只是更新了apt的资源列表没有真正的对系统执行更新。apt-get update是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引这样才能获取到最新的软件包。
sudo apt-get upgrade #对比本地软件版本与源上软件版本并更新本地版本到源上最新版本。
2.4 安装Qt依赖库
2.4.1 安装Qt依赖库
sudo apt-get install .*libxcb.* libxrender-dev libxi-dev libfontconfig1-dev libudev-dev
sudo apt-get install libgles2-mesa-dev libgl1-mesa-dev
2.4.2 软连接opengl es库
进入Jetson Orin Nano的/usr/lib/aarch64-linux-gnu/tegra-egl 目录执行
sudo ln -s libGLESv2_nvidia.so.2 libGLESv2.so
sudo ln -s libEGL_nvidia.so.0 libEGL.so
实际上只是将这两个英伟达提供的 gl 动态库重命名不同的设备厂商提供的支持库名字可能会有差异
3.Server编译Qt源码
3.1 在server上安装交叉编译器并配置环境变量
3.1.1 安装命令
sudo apt-get install gcc-aarch64-linux-gnu g-aarch64-linux-gnu
安装好后使用
which aarch64-linux-gnu-gc c#命令查看其安装位置
我的位置在/usr/bin/aarch64-linux-gnu-gcc 下 安装后面所需要的其它工具
sudo apt-get install git bison python gperf pkg-config
sudo apt-get install make libclang-dev build-essential
3.2 配置环境变量
编译/etc/profile文件,
sudo vim /etc/profile
在编译模式下先按i进行文本插入在文件底部加入 export PATH/usr/bin:$PATH 然后按ESC 并输入wq保存。最后进行source /etc/profile 更新环境变量查看/usr/bin是否已经加入到环境变量使用echo ${PATH} 结果如下 3.3 编译源码
3.3.1解压Qt源码
mkdir /opt/Qt5JetsonOrinNano
cd /opt/Qt5JetsonOrinNano
sudo chown username:username /opt/Qt5JetsonOrinNano#(username 是/home/ 下你的用户名) 修改Qt5JetsonOrinNano组
sudo tar xf qt-everywhere-src-5.14.2.tar.xz
3.3.2 同步Jeston Orin Nano上的库到本地
在/opt/Qt5JetsonOrinNano目录下使用mkdir sysroot创建sysroot文件夹,然后同步Jetson Orin Nano上面的库到Server上
rsync -avz rootJetsonOrinNanoIp:/lib sysroot
rsync -avz root JetsonOrinNanoIp:/usr/include sysroot/usr
rsync -avz root JetsonOrinNanoIp:/usr/lib sysroot/usr
3.3.3 修改sysroot软链接
在同步库后然后需要修改sysroot里面的软链接里面有很多软连接使用的都是绝对路径那就会直接链接到你PC的/usr、/lib目录里面去那肯定是错的我们希望它们链接到 sysroot里面对应的库。所以我们需要把绝对路径改成相对路径。直接用网上现成的python脚本完成(有时会连接超时自己想办法下载)。
sudo wget https://github.com/Kukkimonsuta/rpi-buildqt/blob/master/scripts/utils/sysroot-relativelinks.py 脚本内容如下
#!/usr/bin/env python
import sys
import os# source: https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py# Take a sysroot directory and turn all the absolute symlinks and turn them into
# relative ones such that the sysroot is usable within another system.if len(sys.argv) ! 2:print(Usage is sys.argv[0] directory)sys.exit(1)topdir sys.argv[1]
topdir os.path.abspath(topdir)def handlelink(filePath, subdir):link os.readlink(filePath)if link[0] ! /:returnif link.startswith(topdir):returnnewLink os.path.relpath(topdirlink, subdir)print(\t%s replacing %s %s % (filePath, link, newLink))os.unlink(filePath)os.symlink(newLink, filePath)for subdir, dirs, files in os.walk(topdir):for file in files:filePath os.path.join(subdir, file)if os.path.islink(filePath):handlelink(filePath, subdir)
然后给sysroot-relativelinks.py添加权限 sudo chmod x sysroot-relativelinks.py
运行文件
./sysroot-relativelinks.py sysroot #修改sysroot下相关Lib的软链接
rsync -avz rootJetsonOrinNanoIp:/lib sysroot #我这是不放心又同步一次
rsync -avz root JetsonOrinNanoIp:/usr/include sysroot/usr
./sysroot-relativelinks.py sysroot
3.3.4创建Jetson Orin Nano的qmake.conf文件
先查看devices下支持的设备
ls qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/
查看qt源码下支持的设备由于没有 Nano 文件夹我们使用相似的linux-jetson-tx1-g复制一份jetson orin nano的文件夹
cp -r qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-tx1-g/ qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-orin-nano/
修改qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-orin-nano/qmake.conf文件内容如下
#
# qmake configuration for the Jetson Orin Nano boards running Linux For Tegra
#
# Note that this environment has been tested with X11 only.
#
# A typical configure line might look like:
# configure \
# -device linux-jetson-orin-nano \
# -device-option CROSS_COMPILE/usr/bin/aarch64-linux-gnu- \
# -sysroot /opt/Qt5JetsonOrinNano/sysrootinclude(../common/linux_device_pre.conf)QMAKE_INCDIR_POST \$$[QT_SYSROOT]/usr/include \$$[QT_SYSROOT]/usr/include/aarch64-linux-gnuQMAKE_LIBDIR_POST \$$[QT_SYSROOT]/usr/lib \$$[QT_SYSROOT]/lib/aarch64-linux-gnu \$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnuQMAKE_RPATHLINKDIR_POST \$$[QT_SYSROOT]/usr/lib \$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \$$[QT_SYSROOT]/lib/aarch64-linux-gnuQMAKE_INCDIR_EGL $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra-egl
DISTRO_OPTS aarch64
COMPILER_FLAGS -marcharmv8-acrccrypto
EGLFS_DEVICE_INTEGRATION eglfs_kms_egldevice
include(../common/linux_arm_device_post.conf)
load(qt_config)
3.3.5建立编译文件夹
mkdir Qt5Build
cd Qt5Build
配置make 的编译环境
sudo ../qt-everywhere-src-5.14.2/configure -opengl es2 -xcb -device linux-jetson-orin-nano -device-option CROSS_COMPILE/usr/bin/aarch64-linux-gnu- -sysroot /opt/Qt5JetsonOrinNano/sysroot -prefix /usr/local/Qt5JetsonOrinNano -opensource -confirm-license -skip qtmultimedia -skip qtscript -skip qtwebengine -force-debug-info -skip qtdatavis3d -skip qtlocation -nomake examples -make libs -pkg-config -no-eglfs -no-use-gold-linker -v
出现错误[(1条消息) Ubuntu18源码编译安装qt5.15.3和MeshLab踩坑_error: feature xcb was enabled, but the pre-cond_JaceYangg的博客-CSDN博客]
ERROR: Feature xcb was enabled, but the pre-condition features.thread ..... #出现这个问题把上面命令中的 -xcb-xlib配置项去掉。可以-xcb 不删除。
sudo apt-get install ^libxcb.*-dev libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
如果还有问题再查找其解决方案
编译
sudo make -j4 等待编译完成之后再进行安装
sudo make install 安装后的目录如下 查看编译生成目录下的qmake是否存在用于配置qtcreator的qmake环境 把编译生成的相关库同步到Jetson Orin Nano上。
sudo rsync -avz sysroot/usr/local/Qt5JetsonOrinNano root JetsonOrinNanoIp:/usr/local
至此QT源码编译完成。
4.Server交叉编译代码到Jetson Orin Nano上
4.1 在Server上创建一个test文件夹 mkdir testCrossCompiler cd testCrossCompilertouch hello.cppvim hello.cpp #include QCoreApplication
#include QDebugint main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() Hello World;return a.exec();
}
4.2使用编译Qt源码生成的qmake编译项目 生成.pro文件
4.2.1 在testCrossCompiler目录下使用qmake命令
/opt/Qt5JetsonOrinNano/sysroot/usr/local/Qt5JetsonOrinNano/bin/qmake -project 4.2.2 使用qmake生成Makefile文件 4.2.3 使用命令make生成arm文件 4.2.4 拷贝文件到Jetson Orin Nano上运行
scp ./testCrossCompiler nvidiaJetsonOrinNanoIp:/home/nvidia/Downloads/test
4.2.5 在Jetson Orin Nano上运行编译生成的文件
./testCrossCompiler 下面会出Server上配置ARM的交叉编译环境。
好久没有写文章了。上面的应该勉强能看。如有问题请提出我不会修改的哈哈。如果按照步骤弄不成多找找自身的原因手动滑稽。
最后最后有问题请在评论区提出我会帮助解决。感谢查看