使用 Visual Studio Code 调试 RTKLIB

RTKLIB 是测绘导航专业著名的开源软件,因其合理的模块设计和良好的编码风格,具有极好的可扩展性。基于该软件进行二次开发非常方便,因此也被称之为 “GNSS 专业者的奶瓶”。RTKLIB 软件使用 C 语言开发,可以在 Windows、Linux 和 macOS 等多个操作系统上编译运行。

我比较喜欢使用 Visual Studio Code 进行开发。本文以 RTKLIB 中的 RNX2RTKP 为例,基于 Windows 操作系统,使用 GCC 套件进行编译和调试。

安装 MinGW-W64

下载

为了在 Windows 使用 GCC 软件,需要安装 MinGW-w64,目前该项目的最新版本为 8.1.0。首先从 SOURCEFORGE 网站下载 MinGW-w64。MinGW-w64 提供在线安装和完全下载两种方式,但需要注意:在线安装往往会失败,推荐使用完全下载的方式。我下载的选项为 x86_64-win32-seh,下载之后得到一个扩展名为 7z 的压缩文件。

解压下载的文件,将其中的 mingw64 文件夹复制到你希望的安装软件的位置。我将其复制到了 C:/Program Files 文件夹中,接下来以该目录为例。

配置环境变量

为了在任何目录中使用 GCC,需要将 GCC 添加到系统的 Path 变量中。对于 Windows 11 操作系统,打开“设置”,进入“系统”->“关于”页面,点击“高级系统设置”。在弹出的窗口中点击“环境变量”按钮,进入配置窗口。选中 “Path” 后点击“编辑”,新建一行将 MinGW-w64 的 bin 文件夹加入到环境变量中,如下图所示。

环境变量编辑

安装 C/C++ 插件

为了在 Visual Studio Code 中调试 RTKLIB,还需要安装 C/C++ 插件。点击 Visual Studio Code 左侧的“扩展”,在搜索框中输入 “C/C++”,由微软开发的 C/C++ 插件将出现在最上方。点击“安装”按钮将其安装到电脑上。

创建开发工程

Visual Studio Code 基于文件目录管理工程。为了编译 RNX2RTKP,首先创建名为 rnx2rtkp 的文件夹,然后将 RTKLIB 的 srclib 两个文件夹,以及 app/rnx2rtkp 文件夹中的 rnx2rtkp.c 文件拷贝至其中。形成如下所示的文件结构:

1
2
3
4
.rnx2rtkp/
|---lib/
|---src/
|---rnx2rtkp.c

编译 IERS

为了计算地球自转参数,RTKLIB 使用了 IERS 公布的部分 Fortran 代码,好在 MinGW-w64 中也包含了 Fortran 编译器。在编译 RTKLIB 之前,需要首先编译这些 Fortran 代码,形成链接库。

使用 cd 命令进入 lib/iers/gcc 文件夹,执行以下命令进行编译:

1
$ mingw32-make

静待代码编译完成即可。

配置 Visual Studio Code

以上工作完成之后,终于可以配置 Visual Studio Code 了。使用 Visual Studio Code 打开项目文件夹,然后点击菜单“终端”->“配置默认生成任务”,选择“C/C++: gcc.exe 生成活动文件”。此时项目文件夹内将生成一个新的文件夹 .vscode,里面包含一个文件 task.json。编辑该文件,更改 args 为:

1
2
3
4
5
6
7
8
9
10
11
12
13
"args": [
"-fdiagnostics-color=always",
"src/*.c",
"src/rcv/*.c",
"-g",
"rnx2rtkp.c",
"-I",
"src",
"-lwinmm",
"-lws2_32",
"-o",
"rnx2rtkp.exe"
],

这里 -g 参数后为主程序文件名,-o 参数后为编译生成的可执行文件名,-I 参数后为包含 C 语言头文件的文件夹(即 “rtklib.h”),-lwinmm-lws2_32 参数指示编译器引入 winmm.dllws2_32.dll 两个动态链接库文件。

以上工作完成后,可以尝试生成任务了。点击“终端”->“运行生成任务”,启动 GCC 编译。编译成功后,下方的窗口将显示“生成已完成”。查看项目文件夹,会发现已经出现了可执行文件。

接下来进行调试配置。点击“运行”->“添加配置”,选择 “C++(GDB/LLDB)”,将在 .vscode 内生成一个 launch.json 文件。该文件一般不需要更改,只需检查 miDebuggerPath 的值是否为正确的 MinGW-w64 安装路径。在 rnx2rtkp.c 的 main 函数中设置一个断点,点击“运行”->“启动调试”,或者直接按 F5,程序开始进行调试。

最后,如果你完成了一个阶段的开发工作,可以使用如下命令直接编译 RNX2RTKP 程序(注意需要在项目文件夹执行):

1
$ gcc src/*.c src/rcv/*.c -g rnx2rtkp.c -I src -o rtklib.exe -lwinmm -lws2_32