交叉编译 Qt5.12 armv8(aarch64) 带 WebEngine - NVIDIA JETSON TX2
编译平台 Windows10 WSL2 Debian,目标平台 NVIDIA JETSON TX2
(注:Ubuntu <= 16.04 会出现 libclang < 3.8 的问题)
下载源码
为避免网络问题,先安装一个下载工具,使用aria2可以断点继续下载
sudo apt install aria2
然后 cd
到一个工作目录
Qt 5.12.5 源码
aria2c https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/5.12/5.12.5/single/qt-everywhere-src-5.12.5.tar.xz
tar xf qt-everywhere-src-5.12.5.tar.xz
交叉编译工具 Linaro GCC
aria2c https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
tar xf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
在目标平台安装依赖
库
sudo apt-get install '.*libxcb.*' libxrender-dev libxi-dev \
libfontconfig1-dev libudev-dev libxkbcommon-dev \
libxkbcommon-x11-dev libc6-dev-arm64-cross libnss3-dev libicu-dev \
libdbus-1-dev
GLES 和 EGL
mkdir /home/nvidia/GLES
cd /home/nvidia/GLES
apt-get download libgles2-mesa-dev
ar x libgles2*.deb
tar -xvf data.tar.xz
mkdir /home/nvidia/EGL
cd /home/nvidia/EGL
apt-get download libegl1-mesa-dev
ar x libegl1*.deb
tar -xvf data.tar.xz
cd /home/nvidia/GLES/usr/include
sudo cp -r GLES2 GLES3 /usr/include
cd /home/nvidia/EGL/usr/include
sudo cp -r EGL KHR /usr/include
在本机安装依赖
sudo apt-get install -y 'libxcb.*' \
libx11-xcb-dev libglu1-mesa-dev \
libxrender-dev libxi-dev libinput* \
mtdev* mesa-utils \
mesa-utils-extra libgles2-mesa-dev ninja-build \
git rsync pkg-config gcc g++
ps:
以上依赖可能不全,如果 confugre 后提示 xxx 找不到,例如 xxx 找不到
通常可以直接 apt install libxxx-dev
有的库可能带有版本号,例如 libnss3-dev,可以使用 apt search xxx 搜索
安装后重新来一遍下面的全部内容
从目标平台拷贝依赖
这里的 ip 换成自己的 ip
rsync -avz -e ssh nvidia@192.168.12.232:/lib/aarch64-linux-gnu lib
rsync -avz -e ssh nvidia@192.168.12.232:/usr/include usr
rsync -avz -e ssh nvidia@192.168.12.232:/usr/lib usr
rsync -avz -e ssh nvidia@192.168.12.232:/usr/libaarch64-linux-gnu usr
rsync -avz -e ssh nvidia@192.168.12.232:/usr/aarch64-linux-gnu usr
因为有一些依赖实际上是一个symbol link,所以要替换路径
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py PATH_TO_YOUR_DIR
如果链接不到raw.githubusercontent.com
建一个python脚本mkdir sysroot-relativelinks.py && chomod +x sysroot-relativelinks.py && vim sysroot-relativelinks.py
:
#!/usr/bin/env python
import sys
import os
# Take a sysroot directory and turn all the abolute 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(filep, subdir):
link = os.readlink(filep)
if link[0] != "/":
return
if link.startswith(topdir):
return
#print("Replacing %s with %s for %s" % (link, topdir+link, filep))
print("Replacing %s with %s for %s" % (link, os.path.relpath(topdir+link, subdir), filep))
os.unlink(filep)
os.symlink(os.path.relpath(topdir+link, subdir), filep)
for subdir, dirs, files in os.walk(topdir):
for f in files:
filep = os.path.join(subdir, f)
if os.path.islink(filep):
#print("Considering %s" % filep)
handlelink(filep, subdir)
运行 ./sysroot-relativelinks.py PATH_TO_YOUR_DIR
还要替换一个.a的库
ln -sf $PWD/usr/aarch64-linux-gnu/lib/libm.a $PWD/usr/lib/aarch64-linux-gnu/libm.a
编译
修改Qt make时include和lib的查找顺序
vim qt-everywhere-src-5.12.5/qtbase/mkspecs/devices/linux-jetson-tx1-g++/qmake.conf
注释掉 /usr/include
QMAKE_INCDIR_POST += \
# $$[QT_SYSROOT]/usr/include \
$$[QT_SYSROOT]/usr/include/aarch64-linux-gnu
调整LIBDIR和RPATHLIBKDIR的顺序,把/usr/lib/aarch64开头的放到/usr/lib的前面
QMAKE_LIBDIR_POST += \
$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \
$$[QT_SYSROOT]/usr/lib \
$$[QT_SYSROOT]/lib/aarch64-linux-gnu
QMAKE_RPATHLINKDIR_POST += \
$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra \
$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \
$$[QT_SYSROOT]/usr/lib \
$$[QT_SYSROOT]/lib/aarch64-linux-gnu
替换下面的 CROSS_COMPILE
路径为自己的gcc-linaro路径
prefix为安装路径(这个目录是使用交叉编译后的程序自动寻找的QT_DIR目录,当然会被环境变量覆盖)
extprefix为编译后目标主机 Qt 的路径
hostprefix为编译出来的交叉编译工具的路径
sysroot 为刚刚同步库文件的目录
cd qt-everywhere-src-5.12.5
./configure -shared -c++std c++14 \
-opensource -release --confirm-license -pkg-config \
-no-use-gold-linker \
-device linux-jetson-tx1-g++ \
-device-option CROSS_COMPILE=/home/linger/crossbuild/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- \
-sysroot /home/linger/crossbuild \
-nomake examples -nomake tests \
-prefix /home/linger/crossbuild/JetsonTX2/qt5 \
-extprefix /home/linger/crossbuild/JetsonTX2/qt5 \
-hostprefix /home/linger/crossbuild/JetsonTX2/qt5-host \
-opengl es2 \
-pch \
-skip qtwayland \
-skip qtscript \
-skip qtandroidextras \
-skip qtdoc \
-skip qtremoteobjects \
-skip qtlocation \
-make libs \
-no-gbm \
-no-glib \
-qt-libpng \
-qt-libjpeg \
-qt-harfbuzz \
-qt-freetype \
-qt-xcb
config完成后应没有warning和error,如果有依赖问题安装好依赖后删除config.cache重新configure
如果提示dbus有问题,在确认安装好libdbus-1-dev后
修改DEPS/usr/lib/aarch64-linux-gnu/pkgconfig/dbus-1.pc
在Libs
后面添加-lpthread -lsystemd
编译安装
ps:
编译前确保(free -m
)自己的内存+swap 大于 16G, 否则会在编译 chrominm 时挂掉
Linux swapfile 10G, count为大小, 目录位置没有限制,btrfs在kernel 5.0前不支持native swap
cd /var
sudo mkdir swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=1024000
sudo mkswap swapfile
# 开启
sudo swapon /var/swapfile
# 关闭
sudo swapoff /var/swapfile
编译
make -j4
make install
如果编译过程中提示找不到 gn
# 需要代理:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 镜像:
git clone https://source.codeaurora.org/quic/lc/chromium/tools/depot_tools
export PATH=$PATH:PATH_TO_YOUR_depot_tools
安装
cd JetsonTX2
scp -r qt5 nvidia@192.168.12.232:/usr/local
添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qt5/lib
export QT_PLUGIN_PATH=/usr/local/qt5/plugins
export QML_IMPORT_PATH=/usr/local/qt5/qml
export QML2_IMPORT_PATH=/usr/local/qt5/qml
export QT5_DIR=/usr/local/qt5
编译带 WebEngine 的程序需要把 webegnineprocess 和依赖带到程序目录下
qt-everywhere-src-5.12.5/qtwebengine/src/core/release
下的qtwebengine_locales
文件夹、qtwebengine_resources_
开头的.pak文件、icudtl.dat
如果提示:
ERROR:zygote_host_impl_linux.cc(88)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.
切换到非root用户或禁用 Sandbox:export QTWEBENGINE_DISABLE_SANDBOX=1
参考链接:
- QtWebBrowser fails to launch with QtLauncher Demo
- Cross-Compile the Qt Libraries for Nvidia Jetson TX2 and Set the QtCreator Environment
- Windows下定制编译QtWebEngine
- https://github.com/riscv/riscv-poky
- https://doc.qt.io/qt-5/configure-options.html
- https://forum.qt.io/topic/99978/a-suitable-version-of-nss-could-not-be-found-cross-compile-raspberry-pi3-qt5-10-1
交叉编译 Qt5.12 armv8(aarch64) 带 WebEngine - NVIDIA JETSON TX2的更多相关文章
- 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:Nsight Eclipse Edition
嵌入式平台:NVIDIA Jetson TX2 嵌入式系统:Ubuntu16.04 虚拟机系统:Ubuntu14.04 一.NSight简介 Jetpack开发工具为人工智能提供了一整套软件架构,包括 ...
- nvidia jetson tx2 刷机遇到的问题解决
一.主要信息 使用的开发板:nvidia jetson tx2(内存8g有wifi的版本) 使用的JetPack版本: 4.2.2 二.遇到的问题及解决 1. 刷好jetson os 后,开发板一直在 ...
- 【ARM-Linux开发】【CUDA开发】NVIDIA Jetson TX2 进阶:QtCreator安装
Here we have a short article on installing Qt Creator on the NVIDIA Jetson TX1. Looky here: Note: Th ...
- NVIDIA Jetson TX2刷机
官方安装教程 JetPack下载 主机端环境准备 需要在PC端安装虚拟机,虚拟机中安装Ubuntu14.04系统. 按照上面的地址下载JetPack-L4T-3.1-linux-x64.run 主机端 ...
- Nvidia Jetson TX2开发板学习历程(1)- 详细开箱、上电过程
考试周已经结束了,开发板也已经到了.希望借着这个假期能够好好的利用这块开发板学习Linux系统以及Tensorflow的相关知识. 我打算将学习历程通过博客的方式写出来,作为自己的笔记,也可以供以后拿 ...
- Nvidia Jetson TX2开发板学习历程( 2 )- 更换pip源,提高下载速度
通过将pip的源更换为国内源,来提高下载速度,这也将成为今后学习过程下载Python包的基础,建议前期一定要完成! 知名的国内源 清华:https://pypi.tuna.tsinghua.edu.c ...
- NVIDIA TX2--3--NVIDIA Jetson TX2 查看系统版本参数状态及重要指令
NVIDIA Jetson TX2 查看系统参数状态. 当前博主的TX2更新的版本为:Jetpack 3.3, cuda 9.0.252, cudnn7.0, opencv3.3.1, TensorR ...
- Qt5.12.0交叉编译
Qt5.12.0 交叉编译 源码配置 修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件 MAKEFILE_GENERATOR = UNIX C ...
- Qt5.12.2开发Android环境搭建
Qt-Android开发环境概要qt-opensource-windows-x86-5.12.2----armv7jdk-8u201-windows-x64android-ndk-r18b-windo ...
- Ubuntu18.10下安装Qt5.12过程记录
首先你得先安装Ubuntu操作系统(我是在VMWare14中安装的Ubuntu18.10版本). 阿里镜像:https://opsx.alibaba.com/mirror 我这里下载的文件为:ubun ...
随机推荐
- springsecurity 认证,授权,注销,动态菜单,记住我和首页定制
搭建环境: 1.在创建springboot时选择组件web,thymeleaf,spring-security 2.导入静态资源,导入后测试一下环境 认证和授权: 继承类WebSecurityCon ...
- python selenium框架解决ip代理框不能自动化登录,解决pyautogui开不了多线程问题
有时候我们使用python自动化框架的时候,打开一个网页的时候,它会出现出线这一种登录框,我们f12检查不了,用开发者工具强制检查里面没有任何属性. 那这时候我们就可以用到python第三方库:pya ...
- 文件系统考古2:1984 - BSD Fast Filing System
今天继续与大家分享系列文章<50 years in filesystems>,由 KRISTIAN KÖHNTOPP 撰写. 我们将进入文件系统的第二个十年,即1984年,计算机由微型计算 ...
- 花了半天时间,使用spring-boot实现动态数据源,切换自如
在一个项目中使用多个数据源的情况很多,所以动态切换数据源是项目中标配的功能,当然网上有相关的依赖可以使用,比如动态数据源,其依赖为, <dependency> <groupId& ...
- CentOs7安装部署Sonar环境(JDK1.8+MySql5.7+sonarqube7.8)
sonarqube安装前环境准备JDK1.8.MySql5.7. 一.JDK安装 1.下载jdk #打开下面的网址,选择 jdk-8u371-linux-x64.tar.gz 进行下载 (8u371版 ...
- CHAT-GPT初使用
拿chatgpt去试验了一下,一个挺小的需求,但是前后还是更改了三次,体验就是它可以不断改进之前实现的代码,但需要提需求的人比较清楚需求内的细节,差不多类似于,我有想法,它来实现,还是可以提高不少效率 ...
- SpringBoot中的yml文件中读取自定义配置信息
SpringBoot中的yml文件中读取自定义配置信息 开发中遇到的问题,百度的答案我都没有找到,去找大佬获取到的经验总结,这只是其中的一种方法,如果其他大佬有新的方法,可以分享分享. 一.非静态属性 ...
- maven报错:不再支持源选项 5。请使用 6 或更高版本
问题描述 在执行命令 mvn compile 发生错误 D:\Github_NOTES\JavaWeb_Learning\02Java\JavaWeb\Code\Maven1>mvn clean ...
- 关于 Task 简单梳理
〇.前言 Task 是微软在 .Net 4.0 时代推出来的,也是微软极力推荐的一种多线程的处理方式. 在 Task 之前有一个高效多线程操作累 ThreadPool,虽然线程池相对于 Thread, ...
- 2023ccpc大学生程序设计竞赛-wh
对于大一的我,只听说线下大型比赛,而第一次参加也必然心情激动,生为大一,由于没有参赛经历,所有不知道参赛技巧,所以三个人像个无头苍蝇一样,跟着榜单做,我作为写码的,其他两名队友负责思路和想法,第一道签 ...