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