VS2013编译调试RTKLIB代码教程

RTKLIB简介:

由日本东京海洋大学开发(Tokyo University of Marine Science and Technology
),笔者查到最早的介绍是一篇日文的,《RTK-GPS用プログラムライブラリRTKLIBの開発?評価および応用》,其介绍的为RTKLIB  ver.1.1。另有一篇论文《Development of the lowcost RTK GPS receiver with an open source program package  RTKLIB》也可以看下。

其主要功能如下:

支持标准的GPS、GLONASS、QZSS和SBAS的为精确定位算法(目前此版本不支持Galileo系统)
支持多种动态、静态卫星定位方式(单点定位、DGPS、载波相位动态差分定位RTK、静态、移动基站、PPP)
支持全球定位导航系统的多种标准格式和协议


和网上那些普通教程不一样(我们不一样!)

RTKLIB代码对很多初学者帮助很大,最近在通过代码学习GNSS原理,编译调试便是第一步,使用VS2013编译RTKLIV项目是出现了一些常见的问题,尤其是现有教程未强调的均通过加粗附上处理方法,希望可以帮助大家解决。最后也提供了编译通过后的RTKLIB代码供参考。

1. 首先在vs2013中新建一个win32的控制台项目,将rtk源码放到工程路径下(注意不是工程组所在路径),命名为rtklibsrc

2. 在项目上添加一个文件夹[rtklibsrc]然后在文件夹上【添加现有项目】把rtklib的源文件(rtklibsrc下文件)加入工程。在rtklibsrc下建立rcv把(rtklibsrc\rcv)下面的文件也添加到工程

  image

3. 现在开始编译工程,你会发现很多错误。下面我们一步步来解决错误。

   1>  Q: error C1853: “Debug\rtklibHelper.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)    x:\xxxx\rtklibhelper\rtklibsrc\tle.c    1    1    rtklibHelper 
          A: 不使用预编译头image

         

  2> Q: 错误    1    error C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    x:\xxxx\rtklibhelper\rtklibhelper\rtklibsrc\tle.c

        A: 其实提示上面已经告诉你方法了,需要你加入预编译指令来取消这个错误[_CRT_SECURE_NO_WARNINGS]

         image

 

3> Q:  error C4996: 'gethostbyname': Use getaddrinfo() or GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings    x:\xxxx\rtklibhelper\rtklibsrc\stream.c

      A: 这个错误和上面类似,加入[_WINSOCK_DEPRECATED_NO_WARNINGS ]

 

4> Q:接下来是一个这样的错误  error C2466: 不能分配常量大小为 0 的数组    x:\xxxx\rtklibhelper\rtklibsrc\rinex.c

image

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

        image 这个常量为0,那么不能进行编译,我们想上面一样在预编译器里面加入 ENAGLO

 

5> Q:  error C1083: 无法打开包括文件: “rtklib.h”: No such file or directory    x:\xxxx\rtklibhelper\rtklibsrc\rcv\ublox.c    41    1    rtklibHelper

      A:  添加附加目录设置[.\rtklibsrc]  我按照该方法处理后,rcv内文件依然出现问题,后又将rtklib.h复制到了rcv目录下解决,(经睡神提醒,我是因为文件名和教程不一样导致的+_+) 

image, 注意是C/C++的常规下面,不是链接器的常规页面。

 

6> Q:  error LNK2005: _input_oem3 已经在 novatel.obj 中定义    x:\xxxx\rtklibhelper\novatel_old.obj    rtklibHelper

      A: 这个错误是添加文件的时候添加重复了novatel_old.c不应该添加了,删除即可

          image 

 

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

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

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

        A: 添加附加库[连接器->输入->附加依赖库]添加winmm.lib, ws2_32.lib

A:7,8两个问题 我是按照原定方法没成功就自己找的现有的程序发现他们在主函数前添加了编译后缺少的函数定义


#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "ws2_32.lib")
/* show message --------------------------------------------------------------*/
extern int showmsg(char *format, ...)
{
	va_list arg;
	va_start(arg, format); vfprintf(stderr, format, arg); va_end(arg);
	fprintf(stderr, "\r");
	return 0;
}
extern void settspan(gtime_t ts, gtime_t te) {}
extern void settime(gtime_t time) {}


image

    

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

        A: 一查showmsg这个函数如果在DLL中需要自己定义,rtklib里面已经做好了处理需要在预处理器里面加入[DLL]即可。

 

预处理器里面我们添加了

_CRT_SECURE_NO_WARNINGS 
_WINSOCK_DEPRECATED_NO_WARNINGS 
ENAGLO 
DLL

 

  image

 

最后rtklibHelper编译成功了,可以开始编写具体的功能函数了。


  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在Linux QT平台上调试RTKLIB源码的过程中,首先需要确保已经正确安装了QT和相关的开发环境。接下来,可以按照以下步骤进行调试: 1. 编译RTKLIB源码:根据提供的RTKLIB源码,可以使用QT的编译工具链进行编译。在终端中进入RTKLIB源码的目录,输入以下命令进行编译:qmake && make。 2. 配置调试环境:在QT开发环境中,打开RTKLIB的工程文件(通常为.pro文件)。在项目设置中,确保已经选择了正确的编译器和平台。 3. 设置断点:在源码中选择要调试的关键代码行,右键选择“设置断点”。这样,在程序运行到该行时,程序会自动停下来,方便我们查看变量的值和程序的执行流程。 4. 启动调试:点击QT开发环境中的调试按钮,开始运行调试。如果一切正常,程序将在第一个断点处停下来。 5. 单步调试:使用调试工具栏上的按钮,逐行执行代码。可以观察变量的值变化并检查程序流程。特别是在关键算法执行时,可通过单步跟踪查看每一步的结果。 6. 查看变量值:在QT的调试窗口中,可以查看已设置断点处的变量的值。可以在变量窗口、观察窗口、局部窗口等中查看不同变量的值。 7. 针对问题进行调试:如果在调试过程中遇到问题,可以重新设置断点或添加更多的断点,以深入了解错误发生的原因。通过监视变量、查看堆栈和跟踪函数调用,可以进一步分析问题的根源。 8. 修正问题:根据调试的结果,修改代码中的错误或优化算法。可以多次重复以上步骤,直到对RTKLIB源码进行了完整的调试和修改。 总之,在Linux QT平台上调试RTKLIB源码需要借助QT的调试工具和平台功能,结合源码分析和算法设计,以解决问题和优化算法为目标进行调试。 ### 回答2: 要在Linux Qt平台上调试RTKLIB源码,首先需要安装好Linux操作系统和Qt开发环境。然后按照以下步骤进行调试: 1. 下载RTKLIB源码:可以从RTKLIB官方网站上获得最新的源码压缩包,解压到本地目录。 2. 创建Qt项目:在Qt Creator中新建一个Qt项目,选择C++的控制台应用程序模板。 3. 将RTKLIB源码添加到项目中:将RTKLIB源码文件夹中需要用到的文件添加到Qt项目中,可以通过Qt Creator的“添加现有文件”功能或者手动将文件复制到项目目录下。 4. 配置项目参数:通过Qt Creator中的项目配置界面,设置项目的编译选项、链接库等参数。根据RTKLIB编译说明,设置好相关的宏定义和编译选项,以适应Qt项目的编译环境。 5. 编写调试代码:在Qt项目中编写你需要调试代码,根据RTKLIB的功能需要,调用相关的函数和类进行实现。 6. 编译调试:通过Qt Creator中的编译调试功能,编译项目并启动调试器。可以设置断点、跟踪变量的值,查看程序的执行流程,以及排查代码中的bug。 7. 调试过程中注意事项:在调试过程中,需要关注程序的输出信息和调试器的提示,根据需要进行断点设置和变量跟踪。如果出现错误或异常,可以通过调试器的功能找出问题的所在,然后进行修复和调试。 通过以上步骤,你就可以在Linux Qt平台上调试RTKLIB源码了。注意,调试RTKLIB源码需要一定的C++编程和调试经验,对RTKLIB的原理和功能也需要有一定的了解。 ### 回答3: 在Linux Qt平台上调试RTKLIB源码需要以下步骤: 1. 下载RTKLIB源码:首先需要从RTKLIB官方网站上下载源码的压缩包。解压缩该压缩包后,您将得到包含RTKLIB所有文件和文件夹的目录。 2. 安装Qt开发环境:在Linux系统上安装Qt开发环境,这将为您提供运行和调试RTKLIB源码的必要工具和库。您可以从Qt官方网站下载安装程序,根据指南进行安装。 3. 创建Qt项目:使用Qt Creator或其他Qt开发环境创建一个新的Qt项目,设置项目的名称和目录。 4. 导入RTKLIB源码:在新创建的Qt项目中,导入RTKLIB源码的所有文件和文件夹。可以直接将源码文件复制粘贴到项目目录中,或者通过IDE的导入功能导入源码文件。 5. 配置编译选项:配置项目的编译选项,确保正确设置了RTKLIB源码的路径和依赖库。这通常包括添加源码的路径到项目配置文件中,并链接RTKLIB所需的库文件。 6. 构建项目:通过Qt开发环境的构建功能编译和构建项目。这将生成可执行文件,用于运行和调试RTKLIB源码。 7. 设置断点和调试:使用Qt开发环境的调试功能,在源码中设置断点,以便在运行时暂停程序的执行。通过单步调试和观察变量的值,可以逐步跟踪程序的执行流程,查找和排除代码中的错误。 8. 运行和测试:在Qt开发环境中运行已编译的可执行文件,并进行测试和调试。通过观察输出结果和调试信息,您可以验证程序的准确性,检查是否正确实现了RTKLIB的功能。 以上是在Linux Qt平台上调试RTKLIB源码的一般步骤。根据需要,您可能还需要设置其他环境和工具来加速调试过程,例如使用模拟器或实际硬件设备进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值