前言

搞嵌入式难免和arm开发板打交道,普通源文件可以通过PC上配置交叉编译器编译成ARM架构的可执行文件直接下载到开发板上运行,这是一般的操作。倘若要用到QT的工程文件来编译,这时候pc上的QT版本就不支持了,因为pc版是x86_64架构,两者不能兼容。而如果开发板不支持本地安装qt,我们就要自己编译一个嵌入式linux且支持arm架构的qt版本,以满足我们在开发板上跑qt程序的需要.

本文使用的开发板是树莓派(raspberrypi)3代B型,核心是arm公司的Cortex-A53,方法在其他arm开发板适用。

1、准备工作

保证电脑有安装qt,如若没有,可以下载这里的安装包安装(64位),下载地址:
链接: https://pan.baidu.com/s/1nvl6oeH 密码: g7uj

下载之后,在终端用命令给其执行权限,注意切换到管理员用户(root):

#chmod 0755 qt-opensource-linux-x64-5.9.1.run

然后鼠标双击运行即可,之后就按照提示安装完成。

2、配置交叉编译器

注意,建议事先了解开发板系统所自带的交叉编译器,防止版本不适配带来的问题。配置的交叉编译器和编译QT的编译器最好一致,否则可能出错。比如,本项目采用的是树莓派自带的arm-linux-gnueabihf-gcc/g++的编译器,那么整个过程的编译都是用此编译器,这样保证编译的文件环境属性和开发板的运行环境一致,出错可能性较小。

这里有几个版本可供下载,是否支持取决于板上的系统
arm-linux-gcc :实际上是arm-linux-gnueabi-gcc ,大多数linux系统版本支持
arm-linux-gnueabihf-gcc: 树莓派自带编译器,本项目使用
aarch64-linux-gnu-gcc : 针对Arch linux 系统版本

下载地址:
链接: https://pan.baidu.com/s/1i5KQVkD 密码: wwia

解压

#tar -zvxf  gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.gz

后得到目录gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux

在root用户下配置环境变量,编辑.bashrc文件

#vim /root/.bashrc

在里面添加一行

export PATH=/解压的路径/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin:$PATH

然后按esc,输入:wq保存退出,重新打开终端生效。
输入arm-,然后按几下tab,如果有出现一堆编译器就表示配置成功
这里写图片描述

3、编译嵌入式linux的QT版本

这次用到的版本是qt-everywhere-opensource,一个适用于嵌入式linux的版本,而这个版本没有二进制版本,只能靠我们自己编译。

源码下载地址:
链接: https://pan.baidu.com/s/1pLFUt9T 密码: 9avn

解压

#tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz

进入qt-everywhere-opensource-src-4.8.6目录,更改mkspecs目录下linux-arm-gnueabi-g++目录名为linux-arm-gnueabihf-g++

#cd qt-everywhere-opensource-src-4.8.6/
#mv mkspecs/linux-arm-gnueabi-g++ mkspecs/linux-arm-gnueabihf-g++

编辑qmake.config文件

#vim mkspecs/linux-arm-gnueabihf-g++/qmake.conf 

修改原来的交叉编译器换成本项目使用的编译器,结果如下:

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
TARGET_PLATFORM         = unix
TEMPLATE                = app
CONFIG                  += qt warn_on release incremental link_prl gdb_dwarf    _index
QT                      += core gui
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.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_STRIP             = arm-linux-gnueabihf-strip

load(qt_config)

然后保存退出。
编译前安装所需要的32位库:

#yum install glibc.i686 libstdc++.i686 zlib.i686 
#yum install mesa*.i686 

完成后,在终端执行如下命令,进行编译前的环境配置和检查:

./configure -prefix /opt/Qt-4.8.6 -embedded arm -xplatform linux-arm-gnueabihf-g++ -depths 16,24,32 -little-endian -no-mmx -no-3dnow -no-sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -qt-freetype -qt-mouse-pc -qt-mouse-linuxtp -qt-mouse-linuxinput -plugin-mouse-pc -fast -qt-gfx-transformed -opensource -confirm-license

其中,-prefix 后面是指定编译后的安装目录/opt/Qt-4.8.6,-xplatform 后指定交叉编译器linux-arm-gnueabihf-g++,其余选项可以不变

检查完成后,会提示 you just to run “gmake”…等等英文
接下来开始编译安装

#gmake                //开始编译

过程大概几个小时,耐心等待…
编译完成后,安装:

#gmake install        //开始安装

安装完成后,在/opt下就可以看到Qt-4.8.6目录,编译安装成功。

4、配置QT

1)配置交叉编译器

打开PC版本的QT,菜单栏 工具 -> 选项, 选择 “构建和运行”,
接下来配置刚才编译的交叉编译器,gcc和g++的交叉编译版本

点击 “编译器”,选择“Manual”,在右边点击“添加”按钮,选择GCC->C,
名称可命名为ARMGCC,点击浏览,找到编译器目录下的bin目录,选择
arm-linux-gnueabihf-gcc,点击open,然后点击Apply
这里写图片描述

同理,在右边点击“添加”按钮,选择GCC->C++,
名称可命名为ARMG++,点击浏览,找到编译器目录下的bin目录,选择
arm-linux-gnueabihf-g++,点击open,然后点击Apply
这里写图片描述
配置结果如图:
这里写图片描述
点击OK

2)配置qt嵌入式linux版本

回到“构建和运行”,选择Qt Versions,选择手动设置,右边点击“添加”,找到/opt/Qt-4.8.6/bin/qmake,也就是安装后qmake的目录,点击open
这里写图片描述

点击Apply,效果如图:
这里写图片描述

点击 OK 。

3)增加套件

回到 构建和运行,点击“构建套件”,选择手动设置,右边点击添加,
配置如图:
这里写图片描述
备注:sysroot 可以不用添加
点击Apply,然后点击OK,这样qt的环境就配置好了

现在可以试试新建一个工程文件,编译一个hellowindow,套件要选择arm!亲测是可以通过的
这里写图片描述

4)复制相关的QT库

将 /opt/Qt-4.8.6/lib/ 下的所有动态链接库文件复制到板上的 /usr/lib/ 下
这样确保库文件不会找不到

最后,将编译后的可执行文件拷到板上,在板上执行,要加-qws参数

#./可执行文件名 -qws

成功运行,大功告成!

这里写图片描述

Logo

更多推荐