Ubuntu 22 在线编译 QT (aarch64 版本)

Ubuntu 22 在线编译 QT (aarch64 版本)

编译器: gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
QT版本: qt-everywhere-src-5.15.2

1. 下载源码

在 Download 目录下下载所需的压缩包

wget https://mirrors.aliyun.com/qt/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz

2. 解压到指定文件夹

解压到 /opt 目录下

tar -xf qt-everywhere-src-5.15.2.tar.xz -C /opt
tar -xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz

3. 修改配置文件

修改 qt 的编译配置文件,进入 qt 的源码目录,找到 qtbase/mkspace 目录

cp -a linux-aarch64-gnu-g++/ aarch64-linux-gnu-g++/

修改配置文件 aarch64-linux-gnu-g++ 下 qmake.conf 内容,指定 aarch64-linux-gnu-gcc 等编译文件的路径,修改参照如下

修改前:

# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
QMAKE_NM                = aarch64-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-linux-gnu-strip
load(qt_config)

修改后

# modifications to g++.conf
QMAKE_CC                = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
QMAKE_CXX               = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK              = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objcopy
QMAKE_NM                = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-nm -P
QMAKE_STRIP             = /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
load(qt_config)

/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu 是自定义的压缩路径,根据需要替换

4. 配置编译参数

新建一个 build 目录存放编译生成的临时文件,防止源码污染。
(注意,不要在一个源码被污染的目录下编译另一个版本的 QT)

在 qt-everywhere-src-5.15.2 目录下

mkdir build
cd build
touch build.sh

在 build.sh 文件中放入以下内容

../configure \
-verbose \
-opensource \
-release \
-shared \
-confirm-license \
-make libs \
-nomake tests \
-nomake examples \
-skip qtmacextras \
-skip qtandroidextras \
-skip qtlocation    \
-no-opengl \
-xplatform linux-aarch64-gnu-g++ \
-prefix /opt/qt-linux-aarch64

上述参数解释如下:
verbose:打印配置过程中步骤信息
opensource:编译Qt的开源版本
release:编译Qt的release版本
shared:构建 Qt 共享库
confirm-license:自动确认许可
make libs:编译 lib 组件
nomake tests:不编译 tests组件
nomake examples:不编译 examples 组件
skip qtmacextras:跳过 qtmacextras 模块
skip qtandroidextras:跳过 qtandroidextras 模块
no-opengl: 我在虚拟机下编译opengl模块报错,未解决 所以选择不编译
xplatform: 选择交叉编译时的目标 mkspec
prefix :指定 make install 的位置,

5. 执行脚本

chmod 777 build.sh
./build.sh

脚本通过后,执行

gmake -j$(nproc)

编译成功后执行

make install

验证成功

在 /opt/qt-linux-aarch64/bin 目录下执行命令

./qmake --version

出现 qmake 版本表示安装成功

6. error

1. numberic() 函数找不到

在错误提示中提及的文件添加头文件 #include

2. 依赖文件缺少

如果在执行脚本的过程中遇到了 error,可以根据出错提示,看看安装哪些编译依赖库(需要研究哪些错误对应哪些依赖库)

sudo apt-get build-dep
sudo apt-get qtbase5-dev
sudo apt-get install libxcb-xinerama0-dev
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdbus-1-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison
sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt install libclang-6.0-dev llvm-6.0
posted @ 2024-11-19 11:09  王清河  阅读(37)  评论(0编辑  收藏  举报