树莓派开发笔记(二):qt开发环境搭建:树莓派qt编译和宿主机qt交叉编译

简介: 树莓派开发笔记(二):qt开发环境搭建:树莓派qt编译和宿主机qt交叉编译

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79710509

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)

树莓派开发专栏(点击传送门)

上一篇:《树莓派开发笔记(一):入手树莓派3b,成功运行树莓派系统

下一篇:《树莓派开发笔记(三):更便捷的开发,windows下和ubuntu下远程桌面至树莓派

 

前话

   前面已经成功运行树莓派,下面使用Qt开发树莓派。

 

树莓派本地qt编译环境(不推荐)

步骤一:安装qt5

   安装树莓派的桌面版本,可以直接配置qt环境,此种方法总是卡顿的,所以笔者不太推荐。(2019年9月,笔者再次尝试使用树莓派zero wh本地开发,一动卡3-5s,所以此方法只用于跑应用,不建议用于开发)

sudo apt-get update
sudo apt-get install qt5-default
sudo apt-get install qtcreator

(如果需要支持qml,需要下载qml的开发环境,使用以下命令)

sudo apt-get install qtdeclarative5-dev

      直接进入qtcreator

步骤二:配置qmake等构件套件

      需要自己手动配置构建套件,配置qmake,gcc,g++,gdb。

配置c和c++编译器

      配置套件      

步骤三:创建一个GUI程序测试

      运行如下图:

步骤四:创建一个QtQuick程序测试

      运行失败,如下图:

      因为缺少相应的库,输入如下命令:

sudo apt-get install qtdeclarative5-dev

      安装完成后,运行如下图:

 

交叉编译传送文件FileZilla(使用sftp)

步骤一:ubuntu宿主上安装FileZilla

      ubuntu上安装sftp工具,ubuntu软件中心搜索filezilla并进行安装。

步骤二:配置连接树莓派ssh环境

      树莓派和ubuntu在同一个局域网,打开filezilla软件,登录树莓派传送

      登录成功,可以传送文件了。

 

树莓派Qt交叉编译环境(强烈推荐)

安装ubuntu,是直接装系统还是使用虚拟机,大家看着办,笔记上虚拟机,笔者使用的系统是ubuntu14.04 amd64。

在树莓派上测试交叉编译的qt应用

笔者有偿提供已交缠编译树莓派qt的虚拟机包,经测试其程序可以在本篇系统也可以在最新的2019年的bluster系统上正常编译运行,可先验证测试是否可以运行。

下载测试程序运行地址:https://download.csdn.net/download/qq21497936/12937779

运行之前请现在树莓派上安装Qt程序,以最简单的完成Qt库的部署

sudo apt-get update
sudo apt-get install qt5-default
sudo apt-get install qtcreator

 

步骤一:下载树莓派的交叉编译工具链

      使用git下载:

cd
mkdir ~/work
cd ~/work
sudo apt-get install git 
git clone git://github.com/raspberrypi/tools.git

      git时间有点漫长,请继续等待,总共约1.3GB(压缩包是800MB)左右,建议去其他地方下。

      下载下来后我们直接放到~/work/tools

      该工具链中包含了制作镜像的工具,编译器,测试代码等等,其实我们只用到了编译器,因ubuntu是64位的,所以使用x64的,若是32位,则直接使用不带x64尾缀下的即可。

步骤二:测试交叉编译工具链

      检测下编译器是否运行成功:

      将路径引入系统环境变量:

export PATH=$PATH:~/work/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

      测试

mkdir ~/work/project/testHello -p
cd ~/work/project/testHello
sudo apt-get install gedit
gedit main.c

      输入程序,并退出arm  保存

#include <stdio.h>
int main(int argc, char **argv)
{
    printf("Hello, you do it succeed!!!\n");
    return 0;
}

      然后编译

arm-linux-gnueabihf-g++ main.c

      输出a.out,准备放到目标机验证,使用FileZilla(参照FileZilla远程传送)传送a.out文件到是树莓派桌面(树莓派需要启动ssh服务,可参照《树莓派开发笔记(一):入手树莓派3b,成功运行树莓派系统》中的“配置ssh服务”。

      下面打开另外一个终端,使用ssh远程登录,作为交叉编译的登录,我们创建测试文件夹,操作树莓派:

mkdir ~/qtProject/testCrossCompile -p
cd ~/qtProject/testCrossCompile
cp ~/Desktop/a.out .
./a.out

      输出语句,交叉编译程序成功。

步骤三:挂载树莓派文件系统

此处挂载树莓派文件系统,主要是对qt源码进行交叉编译时,需要的一些头文件和库的依赖。在后面使用qt的qmake交叉编译qt应用程序时,也会依赖一些库,如操作树莓派gpio则需要树莓派自带的本地库。

将《树莓派开发笔记(一):入手树莓派3b,成功运行树莓派系统》下载的树莓派系统2018-03-13-raspbian-stretch.img拷贝到ubuntu的桌面上,操作ubuntu。

mkdir ~/work/img
cd ~/ work /img
mv ~/Desktop/2018-03-13-raspbian-stretch.img .
sudo mkdir /mnt/pi-rootfs

      挂载主要分区,使用fdisk –l查看挂载分区

      此处,若offset不对,mount会提示需要指定文件系统格式,所以要fdisk查看。

sudo mount -o loop,offset=$((98304*512)) 2018-03-13-raspbian-stretch.img /mnt/pi-rootfs/

步骤四:安装ubuntu的qt(需要qmake和qtcreator)

   qmake默认会使用系统的qmake,因为版本等问题,可能会直接影响后面qt编译源码出现奇葩错误,所以下载直接可安装的包,并且同时安装了qctreaor用于开发树莓派qt程序的IDE。

sudo apt-get update
sudo apt-get install g++
sudo apt-get install libgl1-mesa-dev

      直接安装qt5.9.3

           

安装完成后,先创建一个gui程序,配置编译构建套并跑起来。

           

此时如下命令:

ls -l /usr/bin/qmake

      可发现连接的文件不存在。

      建立软连接

sudo ln -sf /home/yang/Qt5.7.1/5.7/gcc_64/bin/qmake /usr/bin/qmake

      检查确认一次

步骤五:下载qt源码矫正库文件

   桌面版本安装了qt5,那么我们就没必要自己配置了,下次也可以直接装qt5,最关键的点是,下载交叉编译的qt源码需要和树莓派对应,我们查看树莓派qt的版本,如下图,树莓派的qt版本是5.7.1。

   qt源码在下地址:http://download.qt.io/archive/qt

   下载5.7.1的源码,如果读者版本不一样自己下载对应版本的源码。

      将源码拷贝到~/work下,没有该目录就创建。

cd ~/work
tar xvf qt-everywhere-opensource-src-5.7.1.tar.gz
mv qt-everywhere-opensource-src-5.7.1 qt5.7.1

      此处配置下系统,如果是32位则无需配置,是64位则需要添加32位支持

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

      获取交叉编译

git clone https://github.com/darius-kim/cross-compile-tools.git

      矫正库文件

cd cross-compile-tools
sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/work/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc

步骤六:配置qt编译参数

      下面对qt进行配置

cd ~/work/qt5.7.1/qtbase
./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /mnt/pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-exports -release -make libs -prefix /usr/local/qt5pi -hostprefix /usr/local/qt5pi -v

      注意:-sysroot是编译时参照的根目录,-prefix是带上sysroot相对参照根目录的目录,而-hostprefix是对于主机系统的目录。所以以上配置路径详解为下:

      编译时查找/usr/inclue/test.h头文件:会查找/mnt/pi-rootfs/usr/include/test.h;

      安装时安装到文件路径(prefix):/mnt/pi-rootfs/usr/local/qt5pi,主要是目标机的库文件,插件等等,会自动分开装为prefix和hostprefixe;

      安装时安装到文件路径(hostprefix):/usr/local/qt5pi,主要是主机编译用。

      配置过程出现错误如下:

      切换一个终端查找树莓派下的libglesv2,是有的,如下图:

      建立一个软连接

cd /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf
sudo ln -sf libGLESv2.so.2 libGLESv2.so

      切回配置qt的终端,继续配置,配置完成

步骤七:编译并安装qtbase

      使用make –j4,make过程也是先前出现g++,后续为arm-linux-gnueabihf-g++。

      出现错误,找不到libz.so,librt.so,libm.so,如下图:

      经过查看其实是有这三个库的,只是因为他们是符号链接到/usr/lib所以出错了,如下图:

      执行指令:

cd /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf
sudo ln -sf /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/libm.so.6 libm.so
sudo ln -sf /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/librt.so.1 librt.so
sudo ln -sf /mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf/libz.so.1.2.8 libz.so

      继续make -j4,编译完成

      安装sudo make install,安装完成,下面编译其他模块,最好按照顺序编,之前笔者一直整体编译,总是出现各种问题,入坑约1天多的时间。

步骤八:检查qmake

      检查qmake是否成功安装(应该是有参数-hostprefix决定,不带sysroot前缀,而prefix带sysroot)。

ls /usr/local/qt5pi/bin/qmake

      找到qmake,可以交叉编译其他模块。

      先把qmake文件夹复制到/usr/local/qt5pi

sudo cp -arf ~/work/qt5.7.1/qtbase/bin /mnt/rasp-p-rootfs/usr/local/qt5pi/
/mnt/rasp-pi-rootfs/usr/local/qt5pi/bin/qmake -v

      在交叉编译其他模块前,验证以下qt交叉编译是否可以成功编译目标机上的程序。

步骤九:编译目标机程序并运行验证(qml缺少模块,需要编译其他模块)

      下面打开qtcreator创建一个工程,来检测是否可以交叉编译。

      配置交缠编译构建套件

      主要是qmake最为关键:

      创建一个testWidget项目交叉编译。

      编译后无法运行,打开终端运行文件并查看文件

      表示我们成功了一大半,然后放到树莓派上桌面上运行,如下图:

      运行成功,如下图:

步骤十:编译其他模块

      编译其他交叉编译的模块,这里笔者将交缠编译所有模块,因为作为开发机全一点比较好,部署时需要哪个就哪个,避免其他项目可能导致的需要重新编模块,对于大部分人,交叉编译都是有点麻烦的。

cd ~/work/qt5.7.1/
/usr/local/qt5pi/bin/qmake
make -j4
sudo make install

      重新使用目标平台的qmake扫一遍所有模块(之前qtbase已配置好),然后make,编译。

      在编译模块qtdeclarattive过程中,出现错误,如下图:

      修改源码

cd ~/work/qt5/qt-everywhere-opensource-src-5.7.1/qtdeclarative/src/qml/qml
gedit qqmlmemoryprofiler.cpp

      搜索static bool openLibrary()

      在#ifndef QT_NO_LIBRARY上添加一句#define QT_NO_LIBARRY

      编译完成

      建议多make两次,仅make。

      然后make install

      至此5.7.1所有源码交叉编译完美完成。

      查看prefix目标机,sysroot/prefix,bin是用于宿主机编译目标机的,实际不能直接编,缺少mkspec配置编译器,我们忽略bin目录(以hostprefix为主)。

,

      查看hostprefix主机,主要是编译编译工具。

 

上一篇:《树莓派开发笔记(一):入手树莓派3b,成功运行树莓派系统

下一篇:《树莓派开发笔记(三):更便捷的开发,windows下和ubuntu下远程桌面至树莓派

 

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79710509


相关文章
|
5天前
|
C++
VS2019编译VTK-9.1.0+Qt5.15.2
本文介绍了在VS2019和Qt 5.15.2环境下编译VTK 9.1.0的过程,包括成功编译无警告和错误的截图、修改的pro文件内容,以及在QML中加入VTK的失败尝试和参考链接。
|
5天前
|
C语言 Android开发 C++
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
本文介绍了使用MTuner软件进行Qt MinGW编译程序的内存泄漏检测的方法,提供了MTuner的下载链接和测试代码示例,并通过将Debug程序拖入MTuner来定位内存泄漏问题。
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
|
4天前
|
C++
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
本文介绍了如何编译整合VTK 9.2、DICOM 0.8、DCMTK 3.6.7和Qt 6.2的步骤,包括安装Qt、CMake配置以及确认相关路径和版本设置。
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
|
4天前
|
Unix 网络虚拟化 C++
VS2022+Qt5.14.2成功编译MITK2022.10
使用VS2022和Qt5.14.2成功编译MITK2022.10的过程,包括编译结果的截图、遇到的编译问题的解决方法、两个重要的注意事项(patch文件格式的修改和ITK-gitclone-lastrun文件的存在),以及参考链接。文中详细描述了如何解决编译过程中遇到的错误C2220和警告C4819,以及如何修改文件编码和尾行格式。
VS2022+Qt5.14.2成功编译MITK2022.10
|
4天前
编译QCefView+VS2019+QT5.15.2
本文介绍了如何编译QCefView项目,并在VS2019和Qt 5.15.2环境下集成,包括编译结果、要点、cmake部署Qt的方法和相关参考链接。
编译QCefView+VS2019+QT5.15.2
|
5天前
|
人工智能
三战VS2019编译VTK7.1+Qt5.15.2
本文记录了作者在VS2019环境下编译VTK 7.1与Qt 5.15.2的历程,包括正确配置方法、遇到的编译错误以及解决过程。
|
5天前
|
人工智能 C++
初步编译QT5.15.2+VS2019+VTK8.2.0
本文介绍了在VS2019中编译QT 5.15.2和VTK 8.2.0的过程,包括编译结果、cmake库编译配置和cmake应用配置脚本,以及推荐的参考链接。
|
4天前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
4天前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
4天前
|
机器学习/深度学习 Java 计算机视觉
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
本文记录了使用mingw81_64编译OpenCV 4.5.5、Qt 5.15.2、VTK 9.1的详细过程,包括编译结果截图、编译步骤、遇到的问题及其解决方案,以及相关参考链接。文中还提到了如何编译boost源码为静态库,并提供了测试代码示例。
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录

推荐镜像

更多
下一篇
无影云桌面