ARM版QT交叉编译
一. 安装交叉编译器
小C这里所用的为华为海思系列 arm-hisiv500-linux
aarch64-himix100-linux
Hi3519AV100
芯片。
- 解压交叉编译器压缩包
- 执行后缀名为install的安装脚本,比如
aarch64-himix100-linux.install
,不同系列的交叉编译器都会被安装在/opt/hisi-linux/x86-arm
这个默认目录下,根据系列名区分。
[root@test ]# ll /opt/hisi-linux/x86-arm/
total 8
drwxr-xr-x. 12 520 520 4096 Aug 22 13:55 aarch64-himix100-linux
drwxr-xr-x. 10 520 520 4096 Aug 22 13:44 arm-hisiv500-linux
- 配置环境变量,海思系列芯片自动安装好交叉编译器后已配置好环境变量,无需自己手动配置。如果未配置,则需更改
/etc/profile
文件,在最后增加环境变量,比如:
export PATH="/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:$PATH"
然后,执行如下命令使其生效:
source /etc/profile
二. 下载QT
- 去官网下载自己所需版本的QT源码: http://download.qt.io/archive/qt/
小C所用QT版本为4.8.7 http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz - 解压
tar -zxvf qt-everywhere-opensource-src-4.8.7.tar.gz
- 进入目录
cd qt-everywhere-opensource-src-4.8.7
三. 配置QT
- 配置 qmake.conf 配置文件,首先拷贝一份模板配置文件用于自定义:
cp -r ./mkspecs/qws/linux-arm-g++ ./mkspecs/qws/linux-himix100-g++
编辑配置文件:
gedit ./mkspecs/qws/linux-himix100-g++/qmake.conf
将 arm-linux
替换成对应的编译器即可,比如 aarch64-himix100-linux
,最后,整个文件看起来像下面这样:
#
# qmake configuration for building with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-himix100-linux-gcc
QMAKE_CXX = aarch64-himix100-linux-g++
QMAKE_LINK = aarch64-himix100-linux-g++
QMAKE_LINK_SHLIB = aarch64-himix100-linux-g++
# modifications to linux.conf
QMAKE_AR = aarch64-himix100-linux-ar cqs
QMAKE_OBJCOPY = aarch64-himix100-linux-objcopy
QMAKE_STRIP = aarch64-himix100-linux-strip
load(qt_config)
- 配置 configure
1).arm-hisiv500-linux
和Hi3519AV100
等32位交叉编译器配置:
./configure -opensource -confirm-license -embedded arm -nomake examples -nomake demos -nomake docs -xplatform qws/linux-hisiv500-g++ -prefix /usr/local/Trolltech/QtEmbedded-4.8.7-arm_x32
其中,qws/linux-hisiv500-g++
需要根据不同编译器做对应修改。
安装目录 /usr/local/Trolltech/QtEmbedded-4.8.7-arm_x32
也可根据需要自行定义,默认安装目录在 /usr/local/Trolltech/
,名称根据Qt版本和编译器架构自动命名。
- 配置 configure
2).aarch64-himix100-linux
64位交叉编译器配置:
./configure -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -xplatform qws/linux-himix100-g++ -prefix /usr/local/Trolltech/QtEmbedded-4.8.7-arm_x64
同样的,qws/linux-himix100-g++
需要根据不同编译器做对应修改。
安装目录 /usr/local/Trolltech/QtEmbedded-4.8.7-arm_x64
也可根据需要自行定义,默认安装目录在 /usr/local/Trolltech/
,名称根据Qt版本和编译器架构自动命名。
四. 64位编译器额外配置:
- 编辑
q_atomic_swp.h
头文件,解决编译时候报的汇编swap错误。
gedit ./src/corelib/arch/qatomic_armv5.h
将 q_atomic_swp
函数修改为:
inline char q_atomic_swp(volatile char *ptr, char newval)
{
register char ret;
/*asm volatile("swpb %0,%2,[%3]"
: "=&r"(ret), "=m" (*ptr)
: "r"(newval), "r"(ptr)
: "cc", "memory");*/
ret=*ptr;
*ptr=newval;
return ret;
}
- 修改 itemviews.cpp 396 行,解决编译错误:
error: invalid conversion frome 'int' to
vi src/plugins/accessible/widgets/itemviews.cpp +396
修改后为:
view()->selectionModel()->select(index, QItemSelectionModel::SelectionFlags( QItemSelectionModel::Columns & QItemSelectionModel::Deselect ));
五. 编译安装
- 编译
gmake -j8
- 安装
gmake install
六. 配置 Qt Creator
在工具栏 Tools->Options->Build & Run
选项卡里配置,这里不做过多解释,配置完成后如图所示:
参考:
https://doc.qt.io/archives/qt-4.8/qt-embedded-crosscompiling.html
https://blog.csdn.net/yfkyfk521/article/details/89446969