虚拟机环境
ubuntu 16.04
记录移植过程,参考:
http://www.cnblogs.com/plmmlp09/p/4434343.html,
https://blog.csdn.net/lbc2100/article/details/82347425
感谢原作者!
1. 下载Qt,http://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz
2. 解压源码包
tar -xzvf Desktop/qt-everywhere-opensource-src-4.8.6.tar.gz -C ./
3. 交叉编译
1) 进入qt-everywhere-opensource-src-4.8.6/mkspecs/qws目录,新建linux-hi3559-g++目录,复制linux-arm-g++目录下的所有文件到linux-hi3559-g++
mkdir -p linux-hi3559-g++
cp –a linux-arm-g++/* linux-hi3559-g++
2)进入linux-hi3559-g++,修改文件qmake.conf
vi linux-hi3559-g++/qmake.conf
#
# 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)
QCROSS_HI3531?=arm-hisiv300-linux
# modifications to g++.conf
QMAKE_CC = $(QCROSS_HI3531)-gcc
QMAKE_CXX = $(QCROSS_HI3531)-g++
QMAKE_LINK = $(QCROSS_HI3531)-g++
QMAKE_LINK_SHLIB = $(QCROSS_HI3531)-g++
# modifications to linux.conf
QMAKE_AR = $(QCROSS_HI3531)-ar cqs
QMAKE_OBJCOPY = $(QCROSS_HI3531)-objcopy
QMAKE_STRIP = $(QCROSS_HI3531)-strip
# 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)
3)打开文件qplatformdefs.h增加
vi linux-hi3559-g++/qplatformdefs.h
#undef O_CLOEXEC
#include "../../linux-g++/qplatformdefs.h"
此处主要为解决:编译过程中找不到accept4函数问题
4)安装X11库(安装失败,我的ubuntu默认应该装过x11库)
sudo apt-get install libX11-dev libXext-dev libXtst-dev
5)返回源码目录qt-everywhere-opensource-src-4.8.6进行配置
sudo mkdir /usr/local/Qt4.8.6
./configure --prefix=/usr/local/Qt4.8.6 -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++ -xplatform qws/linux-hi3559-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs -nomake tools
其中: --prefix=/usr/local/Qt4.8.6 为交叉编译目标安装目录
-xplatform qws/linux-hi3559-g++指定编译器及平台配置信息
可能是arm 交叉环境有问题,如果配置好了一般reconfigure下就ok.如果总是有问题,可以修改qatomic_armv5.h,将汇编用c code写可以避过这个错误。改inline char q_atomic_swp为以下内容
sudo gedit /home/li/QT-ARM/qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_armv5.h
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;
}
5)make
6)sudo make install
chad@ubuntu:/usr/local/Qt4.8.6/bin$ ./qmake -v
QMake version 2.01a
Using Qt version 4.8.6 in /usr/local/Qt4.8.6/lib
说明qt4.8.6已交叉编译完成。
chad@ubuntu:/usr/local/Qt4.8.6/bin$ qmake -v
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu
默认安装的x86的qt。
目前是configure可以通过,make失败出现
Makefile:7037: recipe for target '.obj/release-shared-emb-arm/qabstractanimation.o' failed
make[1]: *** [.obj/release-shared-emb-arm/qabstractanimation.o] Error 1
make[1]: Leaving directory '/home/chad/qt-everywhere-opensource-src-4.8.6/src/corelib'
Makefile:196: recipe for target 'sub-corelib-make_default-ordered' failed
第二次编译没有出现上面的错误;可能用下面的方法可以解决
修改 /src/corelib/io/io.pri 99行添加编译器
# vi ./src/corelib/io/io.pri
修改前
修改后
https://blog.csdn.net/zhaoyu_han/article/details/78503248
第三次编译出现这个错误:
修改 itemviews.cpp
~/qt-everywhere-opensource-src-4.8.6$ vi src/plugins/accessible/widgets/itemviews.cpp +396
//view()->selectionModel()->select(index,
// QItemSelectionModel::Columns & QItemSelectionModel::Deselect );
view()->selectionModel()->select(index,
QItemSelectionModel::SelectionFlags(
QItemSelectionModel::Columns & QItemSelectionModel::Deselect ));