ETRD博客

搭建树莓派3上的QT环境并使用VS交叉编译开发的方法

引言

之前已经实现在Windows上使用Visual studio和VisualGDB插件交叉编译开发普通的C工程代码,并且也已经验证VS交叉编译生成的文件放在树莓派上是可以直接运行的。接下来想开发在树莓派上运行的界面程序,毫无疑问,大家想到的应该都是QT,但是如何在树莓派上搭建QT环境,又如何在Windows上使用VS开发并交叉编译QT应用程序,这给我造成了很大的困扰。本文根据个人实践介绍一种最简单、工作量最少的快速在树莓派上搭建QT环境的方法。

研究现状

Google查找了大量的资料,发现基本都在使用同一种方法,就是在Windows或者Ubuntu的PC机上先用交叉编译工具使用树莓派raspbian系统中的头文件及库将QT本身编译一遍,然后将交叉编译出来的Qt文件上传到树莓派上。然而很不幸的是这个编译过程相当复杂,编译过程可能缺少的东西也会很多,更要紧的是即使是多核PC机编译也需要花费大量的时间,6、7个小时之久。可是,为什么是这个思路?必须这么做还是只能这么做。

根据前面使用树莓派的wiringpi这个库的经验,我个人的思路是这样的:首先在树莓派上安装好QT需要的相关库或者文件,然后同步到Windows的交叉编译的工具链文件目录中,然后Windows下VS交叉编译的时候直接调用同步过来的库和文件就应该可以生成在树莓派上能直接运行的程序了。

因此应该首先在树莓派上装好QT,看过一篇文献,里面提到将Qt的源码下载下来,然后在树莓派上进行编译Qt本身进行安装,时间长达38小时之久,因为树莓派本身运行速度的问题,或者这就是后来很多人又在Windows或者Ubuntu的PC机上进行交叉编译Qt本身的原因。可是,为什么每个使用Qt的人都需要自己将Qt本身编译一次,如果我们使用同样的系统,同样的开发方式,理论上我应该完全可以用你编译好的Qt文件,我为什么还需要自己再去浪费7、8个小时,而且很可能还不成功。应该有组织甚至是官方帮我们在对应的系统上预编译好了我们直接用就行了。实际上是有的,Debian Jessie官方就提供了已经编译好的Qt5的包。

先决条件

  • 树莓派的系统是Raspbian Jessie

从参考文献的第一句话可以看出,Debian Jessie在官方仓库中提供了Qt5的包

1
This tutorial shows how to create graphical applications for Raspberry Pi running the Debian Jessie distro using the Qt5 package provided by the official repository.

由于Raspbian Jessie基于Debian Jessie,因此自然是可以的。

在之前我修改系统镜像源的时候,复制别人的配置信息把系统的源配置误配成了基于wheezy的,实际我的系统是基于Jessie的,导致我后来在树莓派上使用命令:

1
sudo apt-get install qt5-default

一直提示软件列表中没有找到安装包,可见基于wheezy系统的树莓派貌似不能直接安装Qt5。

因此先在基于Jessie的树莓派上安装Qt5,然后同步库和文件到Windows的交叉编译工具文件下,进行调用交叉编译开发这个思路应该死完全可行的。

本文基于的软件版本是

  • Visual studio 2013
  • VisualGDB-5.2r7-trial

如果你也是使用VisualGDB这个VS插件,则强烈建议按照其官方提供的教程文档(参考文献中提供)来进行远程安装配置。因为它会自动帮你同步需要的文件,并下载Qt5交叉编译工具。以确保开发环境的完整性。

环境搭建步骤

我们根据参考文献,利用VS建立工程的方式诱发VisualGDB帮我们搭建树莓派以及Windows两端的Qt环境。

  • 确保你的树莓派系统是基于Jessie的,并给它上电,确保其与PC机处于同一局域网。
  • 在Visual Studio中新建项目:

QQ截图20170219162043

  • 选择 Use Qt,并在下方选择语言C++,项目模板:Qt5-base application,点击next

QQ截图20170219154904

  • 跟之前的工程一样,选择在本地进行交叉编译,配置好远程登录的信息,部署目录默认/tmp,勾选一下 Automatically test connection….这个选项它帮助我们建立工程之前检查远程连接的环境。

QQ截图20170219154928

  • 点击左下角的 Click here to configure Qt settings,配置Qt

QQ截图20170219162820

  • 如下是配置对话框,Qt version请选择5.x,Mkspecs directory的路径是默认这样的。

QQ截图20170219163101

如果你的树莓派上还没有安装好Qt5显然这个Mkspecs directory是不存在的,但是VisualGDB也不会帮你自动建立,此时如果你点击OK,那么VisualGDB会报错,提示目录不存在!无法往下进行。因此,此时你需要自己去树莓派中对应的目录下建立qt5文件夹以及在qt5文件下再建立mkspecs文件夹。使用的是mkdir命令,这里不再冗述。

  • 在树莓派中建立好上面这个文件目录以后,点击OK按钮。

QQ截图20170219163936

VisualGDB会检测树莓派中没有对应的Qt5包,因此提示是否帮自动安装。点击Yes

(此图我没有截下来,引用参考文献中的图)

  • 此时VisualGDB会自动帮安装qt5-default。实际上它也是使用命令
1
sudo apt-get install qt5-default

进行远程操控树莓派进行安装的!

QQ截图20170219135206

  • 树莓派上安装完Qt5以后,VisualGDB会提示本地Windows中的sysroot目录下没有包含树莓派端的Qt头文件等,是否重新进行同步?选择是

QQ截图20170219164518

(此图引用自参考文档)

  • 按照参考文献中的图片,我之前的工程配置是同步了/etc目录的,现在去掉这个/etc目录的同步,保持与参考文献中同步的目录一致,避免不必要的麻烦。

QQ截图20170219140359

同步过程需要十几分钟,实际上就是从树莓派上将对应目录的文件拷贝到Windows本地。

  • 文件同步完成后,VisualGDB会自动帮下载安装交叉编译使用的Qt工具。

    QQ截图20170219160142

    注意,我发现VisualGDB帮下载东西总是很慢,如果你也下载到后面,进度条很久都不动了,建议Cancel重试一下。我怀疑是国外网站被墙的原因,建议开启全局科学上网的方式,再重试。我发现这样就很快了,但我并不确定。

    这个QT5 tools我理解应该是Windows上编译用的,因为它最终被安装在

    1
    D:\SysGCC\Raspberry\Qt\v5

    QQ截图20170219170016

  • 接下来,一个基于Qt5的模板工程自动建立

    直接点击VS的调试按钮运行程序!

  • 此时VisualGDB提示缺少X Server for Windows,它的作用是能够远程显示Linux的窗口,很好很强大的功能,强烈推荐安装!修改你想安装的目录,点击OK即可。

    QQ截图20170219161142

  • 安装完成以后,运行程序,已经可以看到基于Qt的对话框了。

    QQ截图20170219161253

  • 关闭Windows端的调试程序,来到树莓派的部署目录/tmp

    QQ截图20170219161543

    果然找到了我们在Windows下交叉编译生成的可执行文件,双击运行。

    QQ截图20170219161631

    果然可以执行,说明我们已经实现在Windows下交叉编译可以直接运行在树莓派上的基于Qt的界面程序了。

  • 在树莓派中我们再通过命令

    1
    qmake -v

QQ截图20170219161042

可以看到我们安装的是Qt 5.3.2版本,这应该就是Debian Jessie官方帮我们已经编译好的Qt了。

小结

本文基于参考文献,实践验证了一种极其简单方便的为树莓派3搭建Qt环境,并在Windows下交叉编译能直接在树莓派上运行的基于Qt的界面应用程序的方法,无需花大量时间和复杂的步骤对Qt本身进行编译。但这仅限于树莓派的系统是Jessie的,不过这个系统应该可以运行在树莓派的各个硬件版本上,所以应该说强烈建议安装这个新的系统。

参考文献

https://visualgdb.com/tutorials/raspberry/qt5/