基于vs的RTKLIB2.4.3编译学习历程及经验分享

本文详细介绍了在Visual Studio 2008至2013中编译RTKLIB2.4.3开源代码的过程,包括创建项目、添加源文件、解决预编译器错误、链接错误以及头文件缺失等问题。作者通过注释源代码、添加预处理器定义、调整项目属性等方式逐步解决编译过程中的各种问题,但最终未能成功生成DLL库文件。文章还探讨了错误原因和可能的解决方案,为读者提供了一套编译步骤和常见问题的处理方法。
摘要由CSDN通过智能技术生成

基于VS2008利用rtklib开源代码处理GPS以及北斗数据详解

1、在vs中新建一个控制台项目(含预编译头);

 

2、在建好的项目中添加rtklib.h以及需要用到的source文件(.c文件),然后将.c改为.cpp并在每个文件首句增加一行#include "stdafx.h",当然在stdafx.h文件中添加#include "rtklib.h"; 这样编译基本可以通过了;

 

3、一般而言,我们不会需要用到rtklib程序集中的所有文件,只是需要部分。比如我需要用到其中的pntpos这个标准单点定位函数,这个时候就需要添加该函数所在实现文件(pntpos.c)。于是添加了这个文件。但是一般而言,只添加这一个可能不能解决问题,因为rtklib的各个文件之间并不是完全独立,pntpos文件中某些函数可能会调用到其他文件中实现的函数。于是需要再把相关文件添加到工程中。对于这个问题,可以根据自己添加的文件,编译时候的提示,依次添加进来相应文件。这样可以解决fatal error的问题;

 

4、在添加完成后,可能会遇到一些其他问题。主要问题有:

a.关于某些地方数组越界或为空(主要是glonass),这个时候,查看rtklib.h头文件,可以发现关于系统启用的#define语句,其中除GPS系统外,其他系统数目都是0,解决的办法主要是注释掉这个判断语句。注释掉rtklib.h文件的自第146行后开始的关于启用其他卫星导航系统的语句,如GLONASS:

//#else

//#define MINPRNGLO   0

//#define MAXPRNGLO   0

//#define NSATGLO     0

//#define NSYSGLO     0

//#endif

 

b.关于很多地方会出现const char*char*的不能转化问题,这个很简单,在相应地方进行强制转化就行。

c.还存在字符集采用的问题,这个只需要在项目属性中使用多字节字符集即可(见下图)。

d.关于某些函数存在未实现的问题,这个时候,可以网上直接搜索那些没有实现的函数,进行替换,或是直接屏蔽掉。

 

rtklib中代码的添加工作基本就这些问题,解决后应该就可以使用了

 

 

相关文章地址:https://www.cnblogs.com/DKSoft/p/4677381.html

这篇介绍了VS2008平台下创建一个C++控制台程序,编译rtklib源码的过程,创建时含预编译头,另外麻烦的将.c文件都改为.cpp文件,还取巧通过注释程序的方法避免一些问题,总的来说没有针对性解决问题,借鉴意义不大。

 

 

学习rtklib时,作者在manual中说过,可以用gcc重建CUI程序。因此选择Visual Studio来重建,VS比C++ Builder好用,且网上的资源也多得多。

1. 首先在vs2013中新建一个win32的dll项目,取消预编译头。,将rtklib下src源码放到工程路径下(注意不是工程组所在路径),如E:\Projects\rtklib-rebuild\src

2. 在项目上添加一个文件夹rtklibsrc然后在文件夹上【添加现有项目】把src中另外的源文件下文件加入工程。在rtklib-rebuild下建立rcv文件夹把原src\rcv下面的文件也添加到工程。创建的工程如下图所示:

                                              1.png

 

然后我们尝试执行编译。

首次编译会与很多错误,我第一次编译时提示了大量的:无法打开包括文件:“rtklib.h”的错误,这是因为没有将rtklib.h头文件的目录包含在项目里的缘故。

解决思路就是将以下路径加入到include目录下(在项目上右键->配置属性->VC++目录->包含目录Include Path选择rtklib.h所在的目录即可)。

 

再次编译,上述错误不再提示。但还存在以下三个错误:

2.png

 

首先是一个这样的错误:

error C2466: 不能分配常量大小为0的数组    x:\xxxx\rtklibhelper\rtklibsrc\rinex.c

 

这个错误我们来看一下, 在[MAXPRNGLO]上面按F12,看他的定义处。

3.png

这个常量为0,那么不能进行编译,我们需要在预编译器里面加入 ENAGLO

 

网上的教程是:项目上右键->c/c++  ->预处理器->添加ENAGLO。

 

再次编译发现上述问题确实消失了。但是会出现以下新的问题。。。。。。

4.png

 

error LNK2019: 无法解析的外部符号 _settspan,该符号在函数 _postpos 中被引用    x:\xxxx\ xxxx \postpos.obj  

 error LNK2019: 无法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引用    x:\xxxx\ xxxx \convrnx.obj

error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0,该符号在函数_tickget 中被引用   x:\xxxx\ xxxx \rtkcmn.obj   

error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号在函数 _accept_nb 中被引用    x:\xxxx\ xxxx \stream.obj 

 

解决思路可通过在添加附加库[连接器->输入->附加依赖库]添加winmm.lib, ws2_32.lib ;在预处理器里面加入DLL,来解决此问题。

 

 

最终其预编译器

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值