提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本篇在Ubuntu 24.04 x86環境下交叉編譯Arm64,成功地在Qt 6.8.2當中上使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、安裝Qt 6.8.2
使用Qt官方進行下載,若遇到下載失敗,請自行尋找另外下載點。
https://download.qt.io/official_releases/online_installers/
相關依賴和版上幾偏差不多依照需求安裝即可
安裝勾選 (依照自己需求勾選)
- 添加工具環境變數
$ vim ~/.bashrc
/* 添加CMake && Ninja 環境變數 */
export PATH=/home/ptc/Qt/Tools/CMake/bin:/home/ptc/Qt/Tools/Ninja:$PATH
$ source ~/.bashrc
二、前置作業
1. 安裝交叉編譯
在這不挑選直接下載吧,另有需求在板上也有其他資源網址可找到
$ sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
2. 在x86上添加 arm64相關包
代码如下(示例):
ubuntu-arm64.sources 是自己創建的
$ sudo dpkg --add-architecture arm64
$ sudo vim /etc/apt/sources.list.d/ubuntu-arm64.sources
Types: deb
URIs: http://ports.ubuntu.com/ubuntu-ports/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Architectures: arm64
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
$ sudo apt update
/*看自己缺啥包,自己安裝即可 */
$ sudo apt install libudev-dev:arm64 libmtdev-dev:arm64
3. Qt 相關作業
- 將 /Qt/6.8.2/Src/qtbase/mkspecs 下的 linux-aarch64-gnu-g++ 複製到 devices 內,修改qmake.conf 內容。
- 確認 Qt/6.8.2/Src/qtbase/mkspecs/devices/linux-aarch64-gnu-g++/qmake.conf 修改以下內容
#
# qmake configuration for building with aarch64-linux-gnu-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
# 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)
- 到下載Qt路徑,為了不汙染源代碼,所以在這創建資料夾。
$ cd ./Qt/6.8.2/
$ mkdir arm64
/* 創建toolchain.cmake */
$ mkdir toolchain
$ cd ./Qt/6.8.2/toolchain
$ vim arm64-toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")
set(CMAKE_LINKER "/usr/bin/aarch64-linux-gnu-ld")
set(CMAKE_AR "/usr/bin/aarch64-linux-gnu-ar")
set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
/* 新增臨時編譯資料夾 */
$ cd ./Qt/6.8.2/
$ mkdir build && cd build
$../Src/configure \
-prefix /home/ptc/Qt/6.8.2/arm64 \
-qt-host-path /home/ptc/Qt/6.8.2/gcc_64 \
-platform linux-g++ \
-device linux-aarch64-gnu-g++ \
-device-option CROSS_COMPILE=aarch64-linux-gnu- \
-no-opengl \
-skip qtopcua -skip qtwebengine -skip qtwebview -skip qtserialport -skip qtlocation \
-no-feature-brotli -no-feature-hunspell \
-- -DCMAKE_TOOLCHAIN_FILE=$HOME/Qt/6.8.2/toolchain/arm64-toolchain.cmake
$ cmake --build . --parallel
$ cmake --install .
4. 在編譯後Qt上也可正常使用
总结
本文介紹了如何在x86環境下交叉編譯arm64,最後在Qt 6.8.2上成功執行。