qt5.6移植到arm和arm64

源码包下载
链接:http://pan.baidu.com/s/1slyKG6D 密码:seh2

///qt5.6移植
1.解包qt-everywhere-opensource-src-5.6.1.tar.gz

配置好交叉编译器.
2.修改交叉编译器, vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
    QMAKE_CC                = arm-linux-gnueabihf-gcc
    QMAKE_CXX               = arm-linux-gnueabihf-g++
    QMAKE_LINK              = arm-linux-gnueabihf-g++
    QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++

    # modifications to linux.conf
    QMAKE_AR                = arm-linux-gnueabihf-ar cqs 
    QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
    QMAKE_NM                = arm-linux-gnueabihf-nm -P
    QMAKE_STRIP             = arm-linux-gnueabihf-strip


3.配置QT
    ./configure -prefix /usr/local/qt-5.6-arm -release -xplatform linux-arm-gnueabi-g++ -make libs -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng 


4. make -j4 
   make install
///

5. QT编译,安装完成后, 在/usr/local/qt-5.6-arm里
   在QT creator里增加一个arm构件
   1)   QT creator打开后, 菜单Tools --> Options --> Build & Run(左边栏) --> Compilers(右边的页框) --> add(选gcc)
      显示配置界面后, name : arm-gcc
                        compiler path: arm-linux-gnueabihf-g++交叉编译器的路径
      完成后,点右下角的apply

   2) 接着点击页框("Qt version") --> add --> 弹出界面后选择/usr/local/qt-5.6-arm/bin/qmake
      完成后,点击apply

   3) 接着点击页框("Kits") --> add 弹出界面后,
    name     : qt-arm
    Compiler : arm-gcc
        Qt version: qt-5.6-arm
    完成后,点击确认保存退出

6. 嵌入式文件系统的QT环境配置:
  1)  把PC上的/usr/local/qt-5.6-arm整个目录复制到网络文件系统的usr/local目录里

  2)  配置网络文件系统的环境变量.
      在网络文件系统etc/profile文件里增加内容:
    export QTDIR=/usr/local/qt-5.6-arm
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
    export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
    export QT_QPA_FONTDIR=$QTDIR/lib/fonts
    export QT_QPA_GENERIC_PLUGINS=evdevtouch:dev/input/event0
    export QT_QWS_FONTDIR=$QTDIR/lib/fonts/
       export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event?
       #export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:inverty
    export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event?
    export set LD_LIBRARY_PATH=$QTDIR:$QTDIR/lib/:$QT_QPA_PLATFORM_PLUGIN_PATH:$QT_QPA_FONTDIR:$LD_LIBRARY_PATH

      配置完后成后,重启板子才会生效。或者"source /etc/profile"

////////
设置QT鼠标,键盘的环境变量:
通过“cat /proc/bus/input/devices” 查看对应的设备文件是哪个event

在板子文件系统的/etc/profile里修改环境变量
 export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event?
 export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event?

重启板子,以便环境变量生效。生效后,QT程序界面即可出鼠标

在板上执行Qt程序时会发生iconv工具的错误:

root @_@ # ./build-untitled-qt_arm-Debug/untitled 
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

解决移植libiconv工具库:
解包libiconv-1.14.tar.gz后,进入源码根目录:

./configure --host=arm-linux-gnueabihf --prefix=`pwd`/libs

make && make install

完成后,从./libs/lib/目录里复制preloadable_libiconv.so到板上文件系统的/lib目录

然后还需要在板上文件系统的/etc/profile文件里配置一个环境变量:

export LD_PRELOAD=/lib/preloadable_libiconv.so

完成以上操作后,再次执行qt程序就不会报关于iconv的错误了



移植到arm64架构的系统上时,需要使用是刚解包得到的源码才可以。 make distclean清除不干净上次编译的.o文件,否则会发生”incompatible xxxx”的错误.

修改使用arm64交叉编译器, vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

    QMAKE_CC                = aarch64-linux-gnu-gcc
    QMAKE_CXX               = aarch64-linux-gnu-g++
    QMAKE_LINK              = aarch64-linux-gnu-g++
    QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

    QMAKE_AR                = aarch64-linux-gnu-ar cqs 
    QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
    QMAKE_NM                = aarch64-linux-gnu-nm -P
    QMAKE_STRIP             = aarch64-linux-gnu-strip

还是一样的配置:

./configure -prefix /usr/local/qt-5.6-arm -release -xplatform linux-arm-gnueabi-g++ -make libs -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng

执行make, 编译qt源码时, 会发生错误:
.obj/disk3/myown/qt-5.6/qtimageformats/src/3rdparty/libwebp/src/dsp/dec.o:dec.c:function VP8DspInit: error: undefined reference to ‘VP8DspInitNEON’
.obj/disk3/myown/qt-5.6/qtimageformats/src/3rdparty/libwebp/src/dsp/enc.o:enc.c:function VP8EncDspInit: error: undefined reference to ‘VP8EncDspInitNEON’
.obj/disk3/myown/qt-5.6/qtimageformats/src/3rdparty/libwebp/src/dsp/lossless.o:lossless.c:function VP8LDspInit: error: undefined reference to ‘VP8LDspInitNEON’
.obj/disk3/myown/qt-5.6/qtimageformats/src/3rdparty/libwebp/src/dsp/upsampling.o:upsampling.c:function WebPInitUpsamplers: error: undefined reference to ‘WebPInitUpsamplersNEON’
collect2: error: ld returned 1 exit status


解决办法, 修改qtimageformats/src/3rdparty/libwebp/src/dsp/dsp.h文件:
68 //#define WEBP_USE_NEON //注释第68行后就可以编译通过

编译完成后,执行”make install”就会把arm版的qt工具及动态库安装到”/usr/local/qt-5.6-arm”目录里.


在qt-creator配置图示:
QT creator打开后, 点击菜单Tools后,进入设置编译器界面:
这里写图片描述

接着增加一个arm版本的配置:
这里写图片描述

最后再设置一个arm版本的套件:
这里写图片描述


以上配置完成后, 新创建工程时,就可以qt-arm的版本了。也可以在下面界面里的”Add kit”里增加arm版本:
这里写图片描述


为了节约空间,也可以仅把qt程序所需的动态库移到嵌入式文件系统里, 查看所需的动态库可以用ldd, 没有ldd命令可以用readelf查看:
aarch64-linux-gnu-readelf -a qt-test | grep “library”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值