2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境

news2024/9/21 19:09:19

最近公司给了我一块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 -v

aarch64-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 root@ip 访问,开启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 root@JetsonOrinNanoIp:/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] != "/":
        return
    if link.startswith(topdir):
        return
    
    newLink = os.path.relpath(topdir+link, 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 root@JetsonOrinNanoIp:/lib sysroot #我这是不放心又同步一次
rsync -avz root@ JetsonOrinNanoIp:/usr/include sysroot/usr
./sysroot-relativelinks.py sysroot

3.3.4创建Jetson Orin Nanoqmake.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/sysroot

include(../common/linux_device_pre.conf)

QMAKE_INCDIR_POST += \
    $$[QT_SYSROOT]/usr/include \
    $$[QT_SYSROOT]/usr/include/aarch64-linux-gnu

QMAKE_LIBDIR_POST += \
    $$[QT_SYSROOT]/usr/lib \
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu \
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu
    QMAKE_RPATHLINKDIR_POST += \
    $$[QT_SYSROOT]/usr/lib \
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu

QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra-egl
DISTRO_OPTS                  += aarch64
COMPILER_FLAGS               += -march=armv8-a+crc+crypto
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 testCrossCompiler
 touch hello.cpp
 vim hello.cpp

#include <QCoreApplication>
#include <QDebug>
 
int 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  nvidia@JetsonOrinNanoIp:/home/nvidia/Downloads/test

4.2.5 在Jetson Orin Nano上运行编译生成的文件

./testCrossCompiler


下面会出Server上配置ARM的交叉编译环境。

好久没有写文章了。上面的应该勉强能看。如有问题请提出,我不会修改的(哈哈)。如果按照步骤弄不成,多找找自身的原因(手动滑稽)。

最后最后,有问题请在评论区提出,我会帮助解决。感谢查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/902216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

md文本学习

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

腾讯云轻量应用服务器配置_网站上线全流程

腾讯云轻量应用服务器CPU内存带宽配置高&#xff0c;成本很低&#xff0c;腾讯云百科来详细说下腾讯云服务器从购买、配置到网站上线全流程&#xff0c;包括轻量服务器配置选择、应用镜像选择、重置密码、防火墙开放端口教程等详细教程&#xff1a; 目录 一&#xff1a;注册腾…

年薪100w的项目组合和项目集经理与项目经理的区别

项目经理未来的发展是什么&#xff1f;很多人经常问&#xff0c;专业的路可以是项目集&#xff0c;项目组合经理&#xff0c;也可以是PMO等等。为什么项目集经理&#xff0c;项目组合经理就挣得比较多呢&#xff1f;今天为大家一一揭秘&#xff01; 项目经理、项目集经理和项目…

【2023年11月第四版教材】《第5章-信息系统工程(合集篇)》

《第5章-信息系统工程&#xff08;合集篇&#xff09;》 章节说明1 软件工程1.1 架构设计1.2 需求分析1.3 软件设计1.4 软件实现&#xff3b;补充第三版教材内容&#xff3d; 1.5 部署交付 2 数据工程2.1 数据建模2.2 数据标准化2.3 数据运维2.4 数据开发利用2.5 数据库安全 3 …

攻防世界-backup

原题 解题思路 备份文件后缀大多是bak、git、svn、swp等&#xff0c;尝试index.php.bak就有文件下载了:

文件型数据库Derby操作示例

1.下载db-derby-10.14.2.0-bin.zip 2.启动数据库&#xff0c;两种方式 1) 可执行程序 Windows可以运行ij.bat, Linux可以运行ij Ij.bat, ij在bin目录里 2&#xff09;通过执行jar包形式启动 Derbyrun.jar在lib目录里 执行Java -jar derbyrun.jar ij 启动 2. 连接数据库 …

除了提升编码能力,养成这4个工作习惯,让你成为更优秀的前端开发者

如果你想成为一名优秀的前端开发者&#xff0c;你需要拥有不仅仅是技术知识。如今&#xff0c;由于谷歌和其他资源的存在&#xff0c;获取技术知识比以前更容易了。而真正能够产生差异的是习惯。就像心理强度对于个人成长很重要一样&#xff0c;有些习惯可以让你成为一个更有效…

七夕最强Python表白代码来了

点击上方Python小二&#xff0c;选择星标公众号 干货速达&#xff0c;不迷路 快到七夕了&#xff0c;大家都懂&#xff0c;这里不过多解释了&#xff0c;送大家几段节日专属Python代码。 玫瑰 毫无疑问&#xff0c;玫瑰一直都是七夕、520......这类节日的专属&#xff0c;带文字…

最长公共子序列——力扣1143

解法:动态规划 int longestCommonSubsequence(string text1, string text2){int m=text1.size(), n=text2.size

高等数学上册 第九章 多元函数微分法及其应用 知识点总结

多元函数微分法及其应用 &#xff08; 1 &#xff09;多元函数的极限&#xff1a; 用“ ε − δ ”语言描述&#xff0c;二元函数的极限叫二重极限 二重极限存在&#xff1a; { 1 、 P ( x , y ) 一定要以任何方式趋于 ( x 0 , y 0 ) 时&#xff0c; f ( x , y ) 无限趋近于 A…

flutter:webview_flutter和flutter_inappwebview的简单使用

前言 最近在研究如何在应用程序中嵌入Web视图&#xff0c;发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求&#xff0c;就使用了官方库&#xff0c;实现一些简单功能是完全ok的 webview_flutter 不建议使用&#xff0c;因为效果不怎么样&#xf…

wps设置其中几页为横版

问题&#xff1a;写文档的时候&#xff0c;有些表格列数太多&#xff0c;纵向显示内容不完整&#xff0c;可以给它改成横向显示。 将鼠标放在表格上一页的底部&#xff0c;点击‘插入-分页-下一页分节符’。 将鼠标放在表格页面的底部&#xff0c;点击‘插入-分页-下一页分节符…

qt显示图片并转换成灰度图及伪彩图

写了个程序&#xff0c;可在途图片&#xff0c;并切换成灰度图及伪彩图显示&#xff0c;主要代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainW…

Java日常的String、Date、计算问题

一、String相关类 三者执行速度&#xff1a;StringBuilder > StringBuffer > String 1.1、String 每次对 String 类型改变的时&#xff0c;都会生成一个新的 String 对象&#xff0c;指针指向新的 String 对象。 适用于字符串不常变的&#xff0c;少量的数据场景中&am…

每日一题 143重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

【Linux】-进程概念之进程地址空间的万字详解(解决一个变量怎么保存不同数据的问题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

Java程序设计——编写计算器

设计主类 Calculator import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Objects;import javax.swing.*;//Calculator类&#xff0c;继承JFrame框架&#xff0c;实现事件监听器接口 public class Calculator e…

如何快速制作一个房地产电子传单?

在如今高度数字化的时代&#xff0c;电子传单成为了宣传推广的一种重要方式。下面将介绍如何利用乔拓云平台快速制作一个房地产电子传单。 第一步&#xff0c;找一个可靠的第三方制作平台/工具&#xff0c;比如乔拓云平台。乔拓云平台是一个功能强大、简单易用的电子传单制作工…

SpringBoot+微信小程序奶茶在线点单小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot微信小程序框架开发的奶茶在线点单小程序系统。首先&#xff0c;这是一个前后端分离的项目&#xff…

2023年,IT人都在追寻什么样的科技和技术?

摘要&#xff1a; 随着科技的不断发展&#xff0c;IT领域也在以惊人的速度发展。每年都会有新的技术和趋势出现&#xff0c;成为IT人士关注和追逐的对象。那么&#xff0c;在2023年&#xff0c;IT人都在追寻什么样的科技和技术呢&#xff1f;本文将探索2023年IT 人士最热衷的科…