一、交叉編譯環境搭建
1.下載交叉編譯工具鏈:https://developer.arm.com/downloads/-/gnu-a
可以根據自己需要下載對應版本,當前最新版本是10.3,
筆者使用10.3編譯后的glibc.so版本太高(glibc_2.3.3, glibc_2.3.4, glibc_2.3.5),與實際部署的系統版本(glibc_2.3.1)不兼容,所以選擇了低一個版本。
2. 下載qt 源碼,筆者使用的是qt5.12.12版本:http://download.qt.io/archive/qt/5.12/5.12.12/single/qt-everywhere-src-5.12.12.tar.xz?直接復制地址用迅雷下載,在網頁上已無法直接下載。
3. 將交叉編譯工具鏈及源碼復制到虛擬機上(系統x64版本,所以下載arrch64),
可以用要本目錄掛載方式放在/mnt/hgfs/.. 目錄下(這個目錄解壓編譯會比較慢),所以選擇放在home下的用戶目錄。
4.解壓交叉編譯器,tar -xvf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
文件夾名稱太長了,筆者改成aarch64-none-linux-gnu-9.2,并移動到/opt目錄下:
5. 設置環境變量export PATH=$PATH:/opt/aarch64-none-linux-gnu-9.2/bin , 執行aarch64-none-linux-gcc -v 查看gcc版本,如果環境變量設置成功則能正常輸出版本信息。
6.?解壓qt源碼,tar -xvf?qt-everywhere-src-5.12.12.tar.xz, 然后執行cd qt-everywhere-src-5.12.12/qtbase/mkspecs/linux-aarch64-gnu-g++,修改qmake.conf,修改前可備份原來的。
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 ? ? ? ? ? ? ? ?= /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-gcc
QMAKE_CXX ? ? ? ? ? ? ? = /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK ? ? ? ? ? ? ?= /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB ? ? ? ?= /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR ? ? ? ? ? ? ? ?= /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY ? ? ? ? ? = /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-objcopy
QMAKE_NM ? ? ? ? ? ? ? ?= /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-nm -P
QMAKE_STRIP ? ? ? ? ? ? = /opt/aarch64-none-linux-gnu-9.2/bin/aarch64-none-linux-gnu-strip
load(qt_config)
6.? 修改完后換到qt-everywhere-src-5.12.12目錄,執行mkdir buildQt5.12,cd buildQt5.12,執行:../configure -prefix $PWD/../../arrch64-arm-9.2-qt5.12 -xplatform linux-aarch64-gnu-g++ -confirm-license -shared -no-opengl -no-openssl -device-option CROSS_COMPILE=aarch64-none-linux-gnu- -optimized-qmake -opensource -nomake tests -nomake examples -skip qtdeclarative , 還有更多參數可選擇,之前參考別人的寫了很多參數,一直報錯,經過篩選目前這些沒有報錯。有些參數增加后編譯沒有報錯,make install時報錯,經過一段折騰,目前暫定這些參數,這些參數可以寫成腳本形式
7.
7. configure完成后,執行sudo make -j8 根據實際情況配置,-j8是多線程執行,20多分鐘編譯完成,然后執行sudo make install安裝。
8. 安裝編譯完后,通過readelf -h **.so 查看so版本是否正確。
在編譯過程中遇到很多問題,各種錯誤不記錄了,接下來的交叉編譯代碼。
8.? 切換到項目目錄,用生成的qmake絕對路徑執行 qmake,會生成makefile,然后make編譯項目。
二、?QtCreator 交叉編譯配置
1.設置環境變量
2.在菜單上選擇工具->選項,配置編譯選項,配置完成后點擊ok。
編譯配置完成。