虛擬機環境
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 ));