移植qt5.6.0到armv7

您所在的位置:网站首页 arm安装qt 移植qt5.6.0到armv7

移植qt5.6.0到armv7

#移植qt5.6.0到armv7 | 来源: 网络整理| 查看: 265

移植qt5.6.0到armv7

概述:本log记录移植qt的整个过程,包括从安装虚拟机到最后编译成功,因为其中任何一个细节都可能导致移植失败

目录

移植qt560到armv7 完整过程目录环境 环境介绍环境搭建下载软件 安装 安装交叉编译工具安装tslib14targz安装qt-everywhere-opensource-src-560-alphatargz安装arm-linux-gdb 解压编译arm-linux-gdb编译arm-linux-gdbserver测试arm-linux-gdbserver

环境 环境介绍 操作系统:win7(64)虚拟机:vmware12虚拟系统:Linux ubuntu 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 环境搭建 在win7主机中安装vmware12 #基本上vm10以上就可以在vm12中虚拟出ubuntu14.04 x64 #我用的ubuntu镜像是ubuntu14.04 64位的。这个过程自行百度 注意:内存最好1G以上,cpu最好分配4核,也不是越高越好,但是太低影响编译速度安装好ubuntu后,修改/etc/apt/source.list 源(源内容自行百度),apt-get update;apt-get upgrade 注意:为什么要加这条内容?因为以后可能要用到一些软件,依赖关系和版本都会受到更新的影响 下载软件: 下载以下软件包 1、交叉编译工具连 sudo apt-get install g++-arm-linux-gnueabi sudo apt-get install gcc-arm-linux-gnueabi 2、tslib1.4.tar.gz 3、qt-everywhere-opensource-src-5.6.0-alpha.tar.gz 安装 安装交叉编译工具 如果自己有特殊编译链的需求,或者觉得自己是高手,那就随意从网上手动下载安装吧,这里采用debian提供的自动安装,不用考虑依赖关系和环境变量 sudo apt-get install g++-arm-linux-gnueabi sudo apt-get install gcc-arm-linux-gnueabi 快准狠 安装tslib1.4.tar.gz # sudo apt-get install automake;autoconf;libtool # ./autogen.sh # echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache # ./configure --host=arm-linux-gnueabi --cache-file=arm-none-linux-gnueabi.cache --enable-inputapi=no --prefix=/opt/tslib1.4 # make # make install

注意: 第三条 echo命令会生成cache文件,不可缺少,因为没有这个文件的内容,编译出错:找不到 rc_malloc函数等错误。 第四条命令中的–prefix= 指定生成库的位置,这个位置自己记住,因为要在安装qt-everywhere-opensource-src-5.6.0-alpha.tar.gz时用到

安装qt-everywhere-opensource-src-5.6.0-alpha.tar.gz

首先,vim qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

# # qmake configuration for building with arm-linux-gnueabi-g++ # MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib #一下内容具体含义请查看官方文档,我的板子是beaglebone black,所以arch=armv7-a mtune=cortex-a8 QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8 QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8 include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) #交叉编译工具链,自行修改成自己的,在命令行中输入#arm- 加tab键,打印出来的就是自己的工具链名字。后缀的-lts意思是加上ts库,也就是tslib库 # modifications to g++.conf QMAKE_CC = arm-linux-gnueabi-gcc -lts QMAKE_CXX = arm-linux-gnueabi-g++ -lts QMAKE_LINK = arm-linux-gnueabi-g++ -lts QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++ -lts #同上 # modifications to linux.conf QMAKE_AR = arm-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy QMAKE_NM = arm-linux-gnueabi-nm -P QMAKE_STRIP = arm-linux-gnueabi-strip load(qt_config) #这个位置就是编译tslib时的prefix位置,自己设置 QMAKE_INCDIR=/opt/tslib1.4/include/ QMAKE_LIBDIR=/opt/tslib1.4/lib/

然后1,vim autoconfig.sh

#!/bin/sh ./configure \ -verbose \ -prefix /opt/qt-5.6.0 \ -confirm-license \ -opensource -release \ -make libs \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -linuxfb \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-libpng \ -qt-zlib \ -tslib \ -no-opengl \ -no-sse2 \ -no-openssl \ -no-nis \ -no-cups \ -no-glib \ -no-dbus \ -no-xcb \ -no-xcursor -no-xfixes -no-xrandr -no-xrender \ -no-separate-debug-info \ -make examples -nomake tools -nomake tests -no-iconv \ -I/opt/tslib1.4/include \ -L/opt/tslib1.4/lib

这个文件的编写参考configure -help 的说明。我只说需要注意的地方

一定要看configure -help的配置说明,因为这些配置决定了你编译出来的qt库需要具备那些功能,例如使用支持zlib、sqlit、3d等等在写这个autoconfig.sh时,不要直接复制粘贴我的,请自行手打。(空格和tab啊,消耗了半天时间,血的教训)

然后2,# ./autoconfig.sh 然后3,# make 然后4,# 上个厕所,喝杯水,或者喝杯水,上个厕所 最后,# make insatll

拷贝到开发板:

安装arm-linux-gdb

如果需要在开发版上在线调试的,需要安装开发板的arm-linux-gdbserver;如果只是开发一些简单的图形界面,个人觉得可以直接使用ubuntu的qtcreater,开发好后,拷贝到开发板即可,但是如果开发的qt需要在线调试开发版的硬件资源,则需要安装arm-gdb. 下载:http://ftp.gnu.org/gnu/gdb/

这里需要说明:gdb和gcc不是同一个项目,(记得g++和gcc也不是同一个项目)所以就有兼容问题例如:memcpy(p_str1, p_str2, sizeof(struct abc))函数在早期版本的gcc中,对语法检测不是很严格,sizeof返回值自动转为int,但是在新版本gcc中会报错,类型不匹配。我试过三个版本的gdb,结合我的gcc报错最少的是gdb-7.11.tar.gz arm-linux-gdb和arm-linux-gdbserver需要分开编译,gdb是给qtcreate用的,是x86的;arm-linux-gdbserver是给板子用的,是arm的;所以gcc是不一样的。

解压 # tar xvf gdb-7.11.tar.gz -C ~/software 编译arm-linux-gdb #./configure --target=arm-linux --prefix=/usr/local/arm-linux-gdb #make #make install

这里会编译错误,在make到example目录的时候显示找不到图形库,不过没有关系,主要东东已经ok,如果没有强迫证的话,可以掠过。

编译arm-linux-gdbserver # cd ~/software/gdb-7.11/gdb/gdbserver # ./configure --target=arm-linux --host=arm-linux # make CC=arm-linux-gnueabi-gcc # make install

这里可能会出现编译错误,很简单,结合自己的c语言基础+度娘,可以轻松搞定。

测试arm-linux-gdbserver

这个坑我不踩 当你非常兴奋的走到这里,终于可以看看gdbserver在板子中输出几行版本信息的时候,你可能得不到幸运之神的眷顾,居然报错了,怎么办?兵来将挡,水来土掩! 首先,在arm中使用file命令查看gdbserver格式,你会惊奇的看到:

root@beaglebone:/usr/local# file arm-linux-gdbserver arm-linux-gdbserver: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=7434d5d3bd2875dfc0f41d421e8a36d7eca2679a, not stripped

得到有用信息,

elf是32位的arm,可以被板子执行。dynamically linked 需要/lib/ld-linux.so.3 那么就好办了,看看/lib目录有没有这个so,发现没有。看过【程序员的自我修养】或熟悉编译原理的同学都知道ld是干嘛的,那么我直接将arm的ld创建一个同名软连接就ok了。 # ln -s /lib/arm-linux-gnueabihf/ld-2.19.so /lib/ld-linux.so.3

到此,大功告成! 收兵。

————————————————–

参考资料: http://www.cnblogs.com/chenfulin5/p/5798764.html http://www.cnblogs.com/cherishui/p/4414013.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3