配置RTKLIB 2.4.3 b34 版本
今天开始学习RTKLIB,打算看看源码,网上找了一些博客,照着操作还是有点问题,综合一下倒是可以基本解决遇到的问题,现在给出我的配置过程,此过程我照着重新做过,应该不会有什么问题,有问题也可以问我。
平台:VS2019
这是参考的博客:
1、
http://t.csdn.cn/Fi6vV
2、
http://t.csdn.cn/UnacB
下载程序源码
链接:https://pan.baidu.com/s/1lk0G80c5XVKuc7s___LsPA?pwd=1234
提取码:1234
准备工作
1、新建一个文件夹,任意命名,比如:RTKlib
2、打开VS2019,创建一个空项目,命名为rtklib,将空项目地址选择RTKlib。
3、复制源码中的src文件夹到空项目rtklib的文件里
加载源码
1、在头文件和源文件处右键,单击现有项,添加src中的头文件和源文件
2、在源文件处右键,单击新建筛选器,命名为rcv,然后选中该文件,向里面添加现有项(src中rcv里的源文件)
创建主函数
添加一个后缀为main.c的源文件
并添加如下代码
#include"src/rtklib.h"
void main()
{
gtime_t ts = { 0 }, te = { 0 };
prcopt_t opt = prcopt_default;
solopt_t sopt = solopt_default;
filopt_t fopt = { 0 };
char* infile[] = { {"E:\\Programme\\Positioning\\RTKlib\\rtklib\\2022\\07590920.05o"},
{"E:\\Programme\\Positioning\\RTKlib\\rtklib\\2022\\30400920.05o"},
{"E:\\Programme\\Positioning\\RTKlib\\rtklib\\2022\\07590920.05n"} };
char* ofile = "E:\\Programme\\Positioning\\RTKlib\\rtklib\\mypos.pos";
opt.navsys = SYS_GPS;
opt.mode = PMODE_MOVEB;
sopt.posf = SOLF_ENU;
postpos(ts, te, 0.0, 0.0, &opt, &sopt, &fopt, infile, 3, ofile, "", "");
}
PS:此部分可参考2链接所给方法创建主函数
我们还需要添加一个参数输入的主函数作为程序入口,其在源码包中路径为\RTKLIB-rtklib_2.4.3\app\consapp\rnx2rtkp\ rnx2rtkp.c,可将其复制到src路径中,并改名为main.c后导入
如果进行此步骤,就无需做 “修改部分代码”那块的第三点
修改配置属性
1、点击项目>>属性>>配置属性>> C/C++ >>预处理器,在预处理器定义处添加:
WIN32
_DEBUG
_CONSOLE
_LIB
_CRT_SECURE_NO_WARNINGS
ENAGAL
ENACMP
ENAIRN
ENAGLO
ENAQZS
TRACE
2、并在配置属性>> VC++ 目录>>包含目录,单击编辑,添加你对应的src文件的路径,如下:
E:\Programme\Positioning\RTKlib\rtklib\src
3、并在项目>>rtklib属性>>配置属性 >>链接器>>输入,附加依赖项处,单击编辑,添加:
winmm.lib
ws2_32.lib
4、项目>>rtklib属性>>配置属性>>C/C++>>常规,在SDL检查处选择否,单击应用
修改部分代码
1、在rtklib.h文件中添加,此部分与前一部分修改可选做一项(注释掉的是和上一部分1和3重合的)
//#define ENAGAL
//#define ENACMP
//#define ENAIRN
//#define ENALEO
//#define ENAGLO
//#define ENAQZS
#pragma warning(disable:4996)
#pragma warning(disable:4101)
#pragma warning(disable:4244)
//#pragma comment(lib,"winmm.lib")
//#pragma comment(lib,"Ws2_32.lib")
2、在rtkcmn.c文件中,做如下图操作
3、同时在rtkcmn.c中,最后部分,注释掉#ifdef WIN_DLL和#endif,否则会出现下图的错误
//#ifdef WIN_DLL
extern int showmsg(char *format,...) {return 0;}
extern void settspan(gtime_t ts, gtime_t te) {}
extern void settime(gtime_t time) {}
//#endif
结尾
生成解决方案,没有错误,到此结束。
如果出现其他的问题,可参考本文开头的两位博主的博客