尚正辉
基于VS的RTKLIB编译学习过程及经验分享(三)
2018-9-30 16:42
阅读:4910

 

 RTKLIB编译形成GNSS定位开源库,RTKLIB开源库有着强大的GPS数据实时和后处理功能,RTKLIB还提供了很多底层的函数,因此我们可以考虑采用直接对源码进行编译输出标准DLL的方式供C调用。便编译平台选择VSRTKLIB库用的是网上开源的rtklib_2.4.3版本,编译的项目采用相对路径,即工程可移植到任何地方,方便以后使用。

RTKLIB的下载地址为:http://www.rtklib.com/

 

1、新建工程。首先,我们在VS2012下先新建一个win32dll项目(空项目)

                                              1.png

 

2、复制库文件。把在github上下载的rtklib2.4.3里的 “src文件夹文件复制到刚刚建立的RTKLIB工程项目文件所在目录下

3、添加库文件。为了与库文件结构保持一致,我们首先源文件文件夹,右击》添加》新建筛选器,接下来先添加头文件rtklib.h;然后是源文件》添加》现有项(添加除rtklib.h所有源文件,)创建“rcv”子文件夹并添加“src/rcv”目录下的所有源文件

4、初步编译解决方案管资源理器下,右击“RTKLIB”项目》生成,进行编译。因为RTKLIB是在C++ Builder编译器下写的,但是我们现在用VS进行编译,会出现一堆的错误,现在我们就一个个来解决。

 

错误类型1error C4996: 'strncpy': This function or variable may beunsafe. Consider using strncpy_s instead. To disable deprecation, use_CRT_SECURE_NO_WARNINGS. See online help for details.

解决:这是由于函数安全性问题,编译器已经给出建议,添加预编译指令【_CRT_SECURE_NO_WARNINGS】。我们打开调试下的项目属性,然后在 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 编辑。在下面添加上【_CRT_SECURE_NO_WARNINGS

同样类似上面的错误,解决方法也类似,同样在预处理器定义-> 编辑。在下面添加上【_WINSOCK_DEPRECATED_NO_WARNINGS

错误类型2 error C2466: 不能分配常量大小为 0 的数组 

解决:这个主要是编译器的问题,用g++就没有问题,在vc中定义数组,需要一个常量值。

我们双击此错误,在有问题的数组定义处,按F12,看到数组大小定义的确实是0我们像上面一样预处理器定义里面加入【ENAGLO可解决此问题。

 

错误类型3error C1083: 无法打开包括文件:“rtklib.h”: No such file ordirectory    

解决:这是因为rcv里的文件找不到rtklib.h这个头文件。我们继续在项目属性里,在配置属性-> C/C++ 常规-> 附加包含目录-> 编辑 。在上面添加rtklib.h的相对路径(使用相对路径,工程才可以移植到任何地方,否则,换个目录路径,还是会提示此错误)在项目里的src找到rtklib.h并查看它的绝对路径在属性界面下的附加包含目录下,添加:【.\src

错误类型4error LNK2019: 无法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引用  

解决:一查showmsg这个函数如果在DLL中需要自己定义,rtklib里面已经做好了处理需要在预处理器里面加入【DLL即可,我们找到之前预处理器定义,在下面添加【DLL再找到项目属性,在配置属性 -> 链接器 -> 输入 -> 附加依赖项里添加 winmm.lib】和 ws2_32.lib

部分警告处理大多数是什么类型转换上的Warning,暂时没有影响,暂不处理

 

同样按照这篇文章的操作步骤仍然无法成功将rtklib编译为一个dll库文件,问题仍出在:

2.png

看了几篇文章试了几种方法这个问题一直无法得到解决。

经过与文章四对比发现,解决这个问题的关键就在于将RTKLIB-rtklib_2.4.3\app\rnx2rtkp文件夹下的rnx2rtkp.c文件放到项目的src文件夹下并加入到工程。再次编译错误就会得到解决。

 


转载本文请联系原作者获取授权,同时请注明本文来自尚正辉科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3386358-1138019.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?