1. 下载QT源码包,地址为:
http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz
2. 将源码包保存在自行设置的路径(笔者的路径为~/QT),进入此路径:
cd ~/QT
3. 解压源码包:
tar -xzvf qt-everywhere-opensource-src-4.8.7.tar.gz -C ./
4. 交叉编译
1) 进入qt-everywhere-opensource-src-4.8.7/mkspecs/qws目录,新建linux-hi3559-g++目录,复制linux-arm-g++目录下的所有文件到linux-hi3559-g++:
cd qt-everywhere-opensource-src-4.8.7/mkspecs/qws/
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.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)
# modifications to g++.conf
QMAKE_CC = arm-linux-gcc
QMAKE_CXX = arm-linux-g++
QMAKE_LINK = arm-linux-g++
QMAKE_LINK_SHLIB = arm-linux-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_STRIP = arm-linux-strip
load(qt_config)
修改之后,qmake.conf文件内容如下:
#
# qmake configuration for building with linux-hi3559-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)
3) 安装X11库:
sudo apt-get install libX11-dev libXext-dev libXtst-dev
4) 返回源码目录qt-everywhere-opensource-src-4.8.7进行配置:
cd ../../
sudo mkdir /usr/local/Qt4.8.7
./configure --prefix=/usr/local/Qt4.8.7-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.7 为交叉编译目标安装目录
-xplatform qws/linux-hi3559-g++指定编译器及平台配置信息
这一步完成后,如果正确,结果如下所示:
……
for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/WebKit/qt/docs/webkitsnippets/webpage/webpage.pro
for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/phonon/phonon.pro
for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/opengl/util/generator.pro
for /home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/opengl/util/meego/shader-cache-introspector.pro
Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into /usr/local/Qt4.8.7
To reconfigure, run 'make confclean' and 'configure'.
5) make,进行编译。
出现以下错误:
……
{standard input}:3950: 错误: operand mismatch -- `swpb x0,x20,[x19]'
{standard input}:3950: Info: did you mean this?
{standard input}:3950: Info: swpb w0, w20, [x19]
{standard input}:3964: 错误: operand mismatch -- `swpb x0,x1,[x23]'
{standard input}:3964: Info: did you mean this?
{standard input}:3964: Info: swpb w0, w1, [x23]
make[1]: *** [.obj/release-shared-emb-arm/qabstractanimation.o] 错误 1
make[1]:正在离开目录 `/home/penghao/QT/qt-everywhere-opensource-src-4.8.7/src/corelib'
make: *** [sub-corelib-make_default-ordered] 错误 2
解决方法如下:
修改~/QT/qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_armv5.h
vi ~/QT/qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_armv5.h,找到125行附近,如下所示修改:
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;
}
保存退出。之后再次运行make,进行编译。
出现以下错误:
解决方法如下:
修改~/QT/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp
vi ~/QT/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp, 找到125行附近,如下所示修改:
bool QAccessibleTable2::unselectColumn(int column)
{
if (!view()->model() || !view()->selectionModel())
return false;
QModelIndex index = view()->model()->index(0, column, view()->rootIndex());
if (!index.isValid() || view()->selectionMode() & QAbstractItemView::NoSelection)
return false;
//view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect);
view()->selectionModel()->select(index, QItemSelectionModel::SelectionFlags(QItemSelectionModel::Columns & QItemSelectionModel::Deselect));
return true;
}
再次执行make,编译。这次可以成功完成了,如下图所示:
6)安装。
sudo make install
5. 测试是否编译安装成功。
执行 qmake -v 命令,出现以下错误:
qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
解决方法: