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

浙公網安備 33010602011771號