Qt4.8.6移植到hi3559(一)

记录移植过程,参考:

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

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=/opt/qte4.8.6 为交叉编译目标安装目录

可能是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;

} 

-xplatform qws/linux-hi3559-g++指定编译器及平台配置信息

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

猜你喜欢

转载自blog.csdn.net/yfkyfk521/article/details/89446969