Qt4.8.6移植到hi3559(一)

虛擬機環境

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 ));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章