VS2012编译RTKLIB-GNSS定位开源库_第1页
VS2012编译RTKLIB-GNSS定位开源库_第2页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VS2012RTKLIBGNSS定位开源库RTKLIB开源库有着强的GPS数据实时和后处理功能,由于笔者的毕业设计中需要对GPS载波相位观测量进RTK解算,故,对RTKLIB开源库进了学习与研究。RTKLIB提供了很多底层的函数,笔者准备直接对源码进编译输出标准DLL的式供C#调。所的VS平台是VS2012(其它VS版本类似),RTKLIB库的是上使的最多,相对稳定的rtklib_2.4.2版本,编译的项采“相对路径”,即程可移植到任何地,便以后使。、RTKLIB简介RTKLIB是全球导航卫星系统GNSS(globalnavigation satellite system)的标准&精密定位开源

2、程序包,RTKLIB由本东京海洋学(Tokyo Universityof Marine Science and Technology)的须知(TomojiTakasu)开发。RTKLIB由个便携式程序库和多个AP(应程序)具库组成。RTKLIB的主要功能有:(1)持多个GNSS系统的标准和精密定位算法,包括GPS,GLONASS,Beidou,Galileo,QZSS和SBAS(2)持多种GNSS实时和后处理定位模式:单点定位、DGPS/DGNSS,动态RTK、静态RTK、移动基站、PPP(3)持多种GNSS标准格式和协议:RINEX2.10、RINEX2.11、RINEX2.12、RINEX

3、3.00、RINEX3.01、RINEX3.02、RTCM2.3、RTCM3.1、RTCM3.2、BINEX、PCV、EMS 2.0(4)持多种GNSS接收机专有数据协议格式:NovAtel:OEM4/V/6,OEM3,OEMStar、Superstar II、Hemisphere、Crescent、ublox:LEA-4T/5T/6T、SkyTraq、JAVAD 、GW10-II/III和NVS(5)持外部通信:Serial、TCP/IP、NTRIP、本地志件(记录和播发)和FTP/HTTP(6)提供许多函数库和API(application program interfaces):卫星和导

4、航系统函数、矩阵和向量函数,时间和字符串函数、坐标的转换,输和输出函数、调试跟踪函数、平台依赖函数、定位模型、模型、天线模型、地球潮汐模型、地准模型、基准转换、RINEX函数、星历和时钟函数、精密星历和时钟、接收机原始数据函数、RTCM函数,解算函数、歌地球KML转换、SBAS函数、选项(option)函数、流数据输和输出函数、整周模糊度解算、标准定位、精密定位、后处理定位(解算)、流服务器函数、RTK服务器函数、下载函数。、基于VS的RTKLIB编译1.新建程。先,我们在VS2012下先新建个win32的dll项(空项)Win32应程序设置如下:2.复制库件。把在github上下载的rtkl

5、ib2.4.2的所有件夹及件复制到刚刚建的RTKLIB程项件所在录下,如图RTKLIB开源库(RTKLIB开源库是C+Builder建的程,与VS不同)下件录结构及各件夹功能:app- APs构建环境data- APs样本数据lib -库成环境bin-可执进制APs和windows链接库doc-档件src-RTKLIB库的源程序util- 实程序具test-测试程序和数据然后我们删掉的RTKLIB程录下的两个件(github开源项的配置件)其实,由于我们现在只是为了编译这个开源库, RTKLIB开源库中除“src件夹”其它的我们暂时都不到,但为了保持库的完整性以及防以后做程会的到,此处都留下了

6、,做实际程应的话,可以删除其它不到的件夹。3.添加库件。为了与库件结构保持致,我们先在“源件”件夹,右击添加新建筛选器,接下来先添加头件(在src件夹中,只有个头件:rtklib.h),然后是源件添加现有项(添加除rtklib.h所有源件,)“rcv”件夹中添加“src/rcv”录下的所有源件,添加完成之后,如图:4.初步编译。“解决案管资源理器”下,右击“RTKLIB”项成,进编译。因为RTKLIB是在C+ Builder编译器下写的,但是我们现在VS进编译,会出现堆的错误,现在我们就个个来解决。5.错误类型1:error C4996:strncpy: This function or va

7、riable may beunsafe. Consider using strncpy_s instead. To disabledeprecation, use_CRT_SECURE_NO_WARNINGS. See online help for details.解决:这是由于函数安全性问题,编译器已经给出建议,添加预编译指令【_CRT_SECURE_NO_WARNINGS】。我们打开调试下的项属性,然后在 配置属性 - C/C+ - 预处理器 - 预处理器定义 - 编辑。在下添加上【_CRT_SECURE_NO_WARNINGS】看到上有编译的时候提类似上的另错误,解决法也类似,同样在预

8、处理器定义-编辑。在下添加上【_WINSOCK_DEPRECATED_NO_WARNINGS】笔者这并没有出现,不过为了以防万,也在“预处理器定义”中添加上此宏。接下来,我们再次Build程,继续解决下错误。6.错误类型2:error C2466:不能分配常量为 0 的数组解决:这个主要是编译器的问题,g+就没有问题,在vc中定义数组,需要个常量值。我们双击此错误,在有问题的数组定义处,按F12,看到数组定义的确实是0同样的,我们像上样在“预处理器定义”加【ENAGLO】接下来,我们再次Build程,继续解决下错误。7.错误类型3:error C1083:法打开包括件:“rtklib.h”:N

9、o such file ordirectory解决:这是因为rcv的件找不到rtklib.h这个头件。我们继续在项属性,在配置属性- C/C+ 常规- 附加包含录- 编辑 。在上添加rtklib.h的相对路径(使相对路径,程才可以移植到任何地,否则,换个录路径,还是会提此错误)在项的src找到rtklib.h并查看它的绝对路径,要想设置相对路径,我们先要了解.表项件所在录之下的录。.表项件所在录向上级录下的录。. 表项件所在录向上级录之下的录。都是针对项件所在录,于定位其它件的路径位置。因此,在“附加包含录”下,添加:【.src】接下来,我们再次Build程,继续解决下错误。8.错误类型4:e

10、rror C2099:初始值设定项不是常量解决:我们双击此错误,定位到如下代码段初始值设定项不是常量,这是因为c编译器不持函数外动态声明变量和分配空间,如果要必须是常量值(在数学中,0/0这种形式般称之为不定式。 1 因为计算0/0就是求出个数,使之与0相乘结果仍得0,显然,其结果可以等于任何数。 2 “0/0”型的函数极限的结果也没有般的规律。)故此,我们把这条语句变量定义的初值初始化为【=0.0】接下来,我们再次Build程,继续解决下错误。9.错误类型5:error C4703:使了可能未初始化的本地指针变量“sbs”解决:我们双击此错误,定位到如下代码段,做如下修改接下来,我们再次Bu

11、ild程,编译后发现蹦出来20个莫名的错误。10.错误类型6:error LNK2019:法解析的外部符号 _showmsg,该符号在函数 _convrnx 中被引解决:查showmsg这个函数如果在DLL中需要定义,rtklib已经做好了处理需要在预处理器加【DLL】即可,我们找到之前预处理器定义处,在下添加【DLL】,再找到项属性,在配置属性 - 链接器 - 输 - 附加依赖项添加 【winmm.lib】和【ws2_32.lib】再次Build程,没有错误,功告成。11.部分警告处理。多数是什么类型转换上的Warning,暂时没有影响,暂不处理。12.总结与补充。般的“变量初始化”等错误,

12、我们都能通过错误列表定位到代码段,进解决,添加宏定义、头件包含路径,容易被开发者忽略。下总结下我们在此次编译RTKLIB开源库中,所做的添加宏定义、头件包含路径等操作。(1)C/C+下预处理器 我们添加了(配置属性 -C/C+ - 预处理器- 预处理器定义- 编辑)_CRT_SECURE_NO_WARNINGS_WINSOCK_DEPRECATED_NO_WARNINGSENAGLODLL(2)C/C+下的附加包含录 我们添加了(配置属性 -C/C+ 常规- 附加包含录- 编辑)【.src】(3)连接器下的附加依赖项 我们添加了(配置属性 - 链接器 - 输 - 附加依赖项)winmm.lib

13、ws2_32.lib补充:通过上的设置,我们可以发现,我们多操作的是C/C+下的配置选项,同样,在VC+配置选项下,同样有包含录,作乎与C/C+下的附加包含录样,我们先了解【包含录、库录、附加包含录、附加库录、附加依赖项区别】VC+录:包含录:寻找#include中的xxxx.h的搜索录库录:寻找.lib件的搜索录C/C+:常规-附加包含录:寻找#include中的xxxx.h的搜索录(每项对应个件夹XXXX,件夹中包含了编译时所需的头件,使时直接#include即可)链接器:常规-附加库录:寻找.lib件的搜索录输-附加依赖项:lib库(C+的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成个.lib件,这样可以保护源代码)故,包含录和附加包含录(库录和附加库录)的区别:包含录:修改了系统的include宏的值,是全局的;附加包含录:于当前项,对其他项没有影响。(库录和附加库录的区别同上)进可知包含录和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论