基于树莓派4B平台下的Qt中编译rktlib( ARM aarch64)
编译环境
硬件平台:树莓派4B (4GB)
操作系统:Linux aarch64 GNU(Linux raspbian 5.10.88-Release-OPENFANS+20211222-v8)
Qt版本:Qt 5.11.3 + Qt Creator 4.8.2
rtklib版本:基于rtklib_2.4.3_c33原版进行了部分功能修改。
安装Qt
1. pi@raspberrypi:~ $ sudo apt-get update
2. pi@raspberrypi:~ $ sudo apt-get install qt5-default
3. pi@raspberrypi:~ $ sudo apt-get install qtcreator
导入和编译
- 打开Qt Creator,选择“Open Projects”,选择“RTKLib.pro”,用默认编译配置工程。
- 新项目的编译的顺序是:qmake->构建->运行(记得一定要先qmake)。
由于更改了编译环境,需要按照当前实际环境创建.pro文件,并且运行qmake生成适当的Makefile。由于rtklib工程中已经有了RTKLib.pro文件,因此只需要重新生产Makefile即可。
在RTKLib文件夹上右键选择“执行qmake”.
3. qmake完成后,如果此时直接在RTKLib文件夹中右键选择“构建”,会提示错误”缺少libRTKLib.a“:
error: No rule to make target ‘…/…/src/libRTKLib.a’, needed by ‘rtknavi_qt’. Stop.
这个问题的根源是由于各个子项目rtkpost_qt、rtknavi_qt等都引用了libRTKLib.a链接库。(rtkpost_qt.pro文件中,会看到一行代码:RTKLIB =…/…/src/libRTKLib.a),因此需要先编译生成libRTKLib.a库,拷贝到指定目录中,其他子项目才能编译通过。 - 编译libRTKLib.a。
在src文件夹上右键选择”构建“,完成编译后,在build-RTKLib-unknown-Debug/src目录下会有一个libRTKLib.a文件,这样再编译其他工程时就不会再报缺少libRTKLib.a的错误。如果你的编译配置里没有采用shadow build,可能需要将编译好的libRTKLib.a拷贝到其他目录下,具体要看×.pro文件中这一行代码的地址是哪里:RTKLIB =…/…/src/libRTKLib.a) - 编译rtkpost_qt等过程中还出现了一个错误:
cannot find -lpng
linker command failed with exit code 1(use -v to see invocation)
查看了pro文件,其中有一行: LIBS += -lpng $${RTKLIB}
这一个的意思是,需要一个名为lpng的库,全称 是libpng。于是马上安装libpng库():zlib1g中是g前面是数字1,不是小写字母l
sudo apt-get install zlib1g-dev
sudo apt-get install libpng-dev
安装完成后,编译通过。
运行效果如下:
后续继续完善基于实时数据流的PPP功能。
补充:如果在安装libpng库时提示如下类似的错误:
sudo apt-get install zlib1g-dev
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
armwin10-launcher : 依赖: python3-tk 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。
pi@raspbian:~$ sudo apt-get install libpng-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
armwin10-launcher : 依赖: python3-tk 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。
先运行如下命令,再运行安装命令:
apt --fix-broken install