移植qt5.6.0到armv7 <完整过程>
来源:互联网 发布:linux samba rpm 编辑:程序博客网 时间:2024/06/04 20:09
移植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-gnueabi2、tslib1.4.tar.gz3、qt-everywhere-opensource-src-5.6.0-alpha.tar.gz
安装
安装交叉编译工具
如果自己有特殊编译链的需求,或者觉得自己是高手,那就随意从网上手动下载安装吧,这里采用debian提供的自动安装,不用考虑依赖关系和环境变量sudo apt-get install g++-arm-linux-gnueabisudo 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 = UNIXCONFIG += incrementalQMAKE_INCREMENTAL_STYLE = sublib#一下内容具体含义请查看官方文档,我的板子是beaglebone black,所以arch=armv7-a mtune=cortex-a8 QT_QPA_DEFAULT_PLATFORM = linuxfbQMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8include(../common/linux.conf)include(../common/gcc-base-unix.conf)include(../common/g++-unix.conf)#交叉编译工具链,自行修改成自己的,在命令行中输入#arm- 加tab键,打印出来的就是自己的工具链名字。后缀的-lts意思是加上ts库,也就是tslib库# modifications to g++.confQMAKE_CC = arm-linux-gnueabi-gcc -ltsQMAKE_CXX = arm-linux-gnueabi-g++ -ltsQMAKE_LINK = arm-linux-gnueabi-g++ -ltsQMAKE_LINK_SHLIB = arm-linux-gnueabi-g++ -lts#同上# modifications to linux.confQMAKE_AR = arm-linux-gnueabi-ar cqsQMAKE_OBJCOPY = arm-linux-gnueabi-objcopyQMAKE_NM = arm-linux-gnueabi-nm -PQMAKE_STRIP = arm-linux-gnueabi-stripload(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
- 移植qt5.6.0到armv7 <完整过程>
- 移植Qt5.6到imx6系列处理器移植过程说明
- ROS(Fuerte)移植到beagleboneblack完整过程
- ROS(groovy)移植到beagleboneblack 上完整过程
- 移植qt5.3.1到arm
- 移植qt5.3.1到arm
- qt5.5.1 移植到arm
- 移植qt5.3.1到arm
- QT5移植到ARM中
- 【实战】移植QT5.6.0到嵌入式linuxS3C2440单板
- Qt4.8.7 linux 程序移植到 Qt5.9 windows 记录过程
- qt5.8交叉编译移植到arm开发板上过程
- qt4移植到qt5注意点
- Qt5.5.1移植到freescale imx6
- QT5.5移植到ARM全攻略
- QT5.5.1移植到cubieborad教程
- Qt4程序移植到Qt5的问题
- 移植QT5.4.0到ARM开发板
- C++ 文件操作
- C++默认拷贝构造函数调用
- Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-plugin-plugi
- leetcode 304.Range Sum Query 2D
- final修饰符
- 移植qt5.6.0到armv7 <完整过程>
- 虚拟篇 04. 检查点的作用 ❀ Windows Server 2016
- iOS 多个文件下载和管理 (二)
- PowerDesigner使用教程
- OI知识结构图
- UIAlertConntroller
- js函数重载方法2 待 ----未看懂
- AR的引用
- [绍棠] FMDB的方法介绍