环境说明:
宿主机环境:ubuntu16.04, 交叉编译链:armv7-rpi2-linux-gnueabihf,Qt版本5.12.12。
目标设备:树莓派4B,armv7硬浮点操作系统。
配置过程:
一. 交叉编译适合树莓派的QT
见这篇交叉编译树莓派QT
二. 配置QtCreator
1. 宿主机下运行qtcreator,点击顶部菜单【Tools】,选择子菜单【Options】,如下图:
2. 进入如下界面:
3. 添加交叉编译的编译器
3.1 点击上图中左侧第一个菜单【Kits】。点击右侧菜单【Compilers】,进入下图:
3.2 点击右侧【Add】,进入下图:
3.3 添加C编译器
在上面的GCC选项下选择C,进入下图:
此时没有任何配置,所以上图中红圈部分出现红色感叹号。下面我们来进行具体配置:
将Name:GCC改为ARMV7_GCC,以免和qtcreator自带的混淆;
在CompilerPath中选择或者输入搭建好的树莓派交叉编译链的路径,我这里填入的是:/home/user/x-tools/armv7-rpi2-linux-gnueabihf/bin/armv7-rpi2-linux-gnueabihf-gcc如何搭建树莓派交叉编译链看这篇https://mp.youkuaiyun.com/mp_blog/creation/editor/145721220
点击底部按钮【Apply】。
具体配置如下图:
3.4 添加C++编译器
在上面的GCC选项下选择C++,进入下图:
此时没有任何配置,所以上图中红圈部分出现红色感叹号。下面我们来进行具体配置:
将Name:GCC改为ARMV7_G++,以免和qtcreator自带的混淆;
在CompilerPath中选择或者输入搭建好的树莓派交叉编译链的路径,我这里填入的是:
/home/user/x-tools/armv7-rpi2-linux-gnueabihf/bin/armv7-rpi2-linux-gnueabihf-g++如何搭建树莓派交叉编译链看这篇https://mp.youkuaiyun.com/mp_blog/creation/editor/145721220
点击底部按钮【Apply】即可完成。
具体配置如下图:
4. 配置QtVersions
点击上图中右侧的【Add】按钮,打开下图:
选择你宿主机编译好的树莓派QT,我这里是
/opt/qt5.12-armv7-rpi2-host/bin/qmake
如何交叉编译适合树莓派的QT看这篇https://mp.youkuaiyun.com/mp_blog/creation/editor/145732868
点击底部按钮【Apply】完成此部分的步骤,如下图:
上图中的黄色感叹号不用理会,直接无视。
5. 配置Kits
点击右侧菜单【Add】,进入下图:
我们开始进行配置:
Unnamed改为ARMV7;
Compiler: C改为上述3.3中配置好的ARMV7_GCC;
Compiler: C++改为上述3.4中配置好的ARMV7_G++;
Qt Version改为上述4中配置好的qt5.12-armv7-rpi2-host那个;
最终配置如下图:
上图中出现黄色感叹号直接无视。到这里配置就完成了。
三. 测试
新建一个QT qt widgets项目:qt_cross_demo ,注意编译环境选择为上述配置好的ARMV7,如下图:
main.cpp中代码如下:
#include "mainwindow.h"
#include <QApplication>
#include <wiringPi.h>
#include <iostream>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
if (wiringPiSetupGpio() == -1) {
std::cerr << "无法初始化WiringPi!" << std::endl;
return 1;
}
else{
std::cerr << "初始化WiringPi成功!" << std::endl;
}
return a.exec();
}
.pro文件中需要增加树莓派GPIO库的链接(倒数第7行,你需要确保你的libwiringPi.so位于此位置),完整内容如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
unix:!macx {
LIBS += -L/home/user/sysroot/lib -lwiringPi
}
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
然后执行编译,将编译好的可执行程序推送到树莓派,最终树莓派运行结果如下:
到此整个配置就完成了。终于可以在宿主机上痛快的进行树莓派程序开发了。