记得大一刚开始接触RTKLIB的时候,单单就是编译rtklib就让我很头疼,请教身边的” 前辈“,要么被句子门外,要么前辈可能觉得太简单,就索性已读不回,走了不少弯路(哈哈哈)。现在已经过去一年了,自己也有了写积累,于是把rtklib的编译过程详细写一下,希望大家都可以少走些弯路。
1. RTKLIB概述
Rtklib是东京海洋大学的高须知二教授(Tomoji Takasu)开发的一款开源软件,主要功能覆盖GNSS标准单点定位(SPP)/伪距差分定位(DGPS)/精密单点定位(PPP)/实时动态定位(RTK),而服从宽松的BDS2-Clause协议,使用户能够自由地使用,修改源代码,也可以将修改后的代码选择继续开源或者闭源,仅须遵守如下两项要求:
1)如果分发的软件包含源代码,则必须在源代码中保留原始的BSD许可证声明;
2)如果分发的软件仅包含二进制程序,则必须在文档或版权说明中保留原始的BSD许可证声明。
Rtklib在代码上优雅、规范、性能相对较好,具有很强的教学价值和实践价值,是大多数GNSS入门者推荐学习的代码。
2. RTKLIB下载
Rtklib的开源库包括Rtklib的源代码库和Rtklib的可执行程序,两者的下载地址分别如下:
源代码库地址:https://github.com/tomojitakasu/RTKLIB/tree/master
GUI:https://github.com/tomojitakasu/RTKLIB_bin/tree/master
此外,也有一些Rtklib的衍生版本,比如:
面向低成本方案的Rtklib demo5:https://github.com/rtklibexplorer/RTKLIB/tree/demo5
该作者也同样提供了一个python版本的rtklib:https://github.com/rtklibexplorer/rtklib-py
感兴趣的同学可以从github上进行源码的下载,然后开始这段学习之旅。
3. VS2022编译RTKLIB
首先打开Visual Studio,点击创建新项目,然后进入下一步,
创建空项目,进行下一步:
配置项目名称和路径位置,我建立的项目名称为rtklib(根据你的具体情况命名为什么都可以),配置的路径为E:\project\rtklib(还是根据你的具体情况),之后点击创建。
这样我们就完成了一个空项目的创建,现在要做的是将源代码导入并进行编译。
复制源文件:首先准备一份下载好并解压的源代码,我这里使用的是rtklib2.4.3的b34版本。将src目录复制到上述工程目录下:
另外将rnx2rtkp(它后处理的主函数)文件夹下的rnx2rtkp.c文件一并拷贝到src目录下。
添加源文件进项目:在项目右键点击添加-现有项,选择src中的所有文件,将所有源文件添加进去。源文件包含rcv文件夹下的所有源代码文件和src目录下的其他源代码文件,我添加的方式是先添加所有rcv目录下的文件,在项目中新建rcv文件夹将该部分文件全部导入到该文件夹下,再将其他文件全部导入。
配置路径:配置路径的目的是配置的搜索源代码中所引用的包含文件的目录。 对应于 INCLUDE 环境变量。
宏配置:宏配置。宏配置的目的是为了解决一些编译问题,我用的是win64的平台,其中WIN32,_CRT_SECURE_NO_WARNINGS,_WINSOCK_DEPRECATED_NO_WARNINGS,ENAGLO是必配置的,否则会产生编译问题,后续三个宏是打开GAL、QZSS、BDS系统的功能开关,建议开启。WIN_DLL宏是windows下的控制宏,会触发部分windows下特有的系统函数使用,尤其是在windows平台下需要打包dll库的时候必须配置,建议开启下面可以直接复制。
WIN32
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
DLL
ENAGLO
ENAGAL
ENAQZS
ENACMP
在使用WIN_DLL宏后,会触发extern关键字和EXPORT关键字在不同地方的重定义问题,我的解决方案是注释掉原有定义,增加WIN_DLL的宏选择配置如下。
- sbs未初始化问题,修正方案为将对应内容增加初始化为NULL。
- 附加依赖项添加,在属性-链接器-附加依赖项中增加winmm.lib和ws2_32.lib库
- rtklib原生代码会触发C4244报错: 一元负运算符应用于无符号类型,结果仍为无符号类型,在不改变源代码功能的情况下,修正方案为将SDL检查关闭。
- 修复showmsg、settspan、settime在rnx2rtkp中的重定义问题。同样由于WIN_DLL宏的配置,该情况下三个函数的定义在不同地方存在不一致的问题,由于该函数已经在其他地方进行了定义,此处注释即可。
现在编译即可通过,如下所示。
Ref
[2].https://wap.sciencenet.cn/blog-3386358-1138020.html?mobile=1
最新评论