GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

news2024/11/25 20:01:06

目录

一、前期准备

二、调试详细步骤

1.VS中新建项目

2.复制源码至项目文件夹

3.将源码中“.c”文件和“.h”文件添加至项目指定位置

4.修改项目属性:

(1)【 配置属性 -> C/C++ ->预处理器 ->预处理器定义】添加如下

(2)【配置属性->链接器->调试->生成调试信息】 调整为 生成调式信息(/DEBUG)

(3)【配置属性-> C/C++ ->常规->调试信息格式】调整为 C7

5.添加多线程依赖库

(1)【配置属性-> C/C++ ->常规->附加目录】

(2)【配置属性->链接器->常规->附加库目录】

6.头文件dirent.h和unistd.h复制VS默认包含目录

7.将配置文件路径添加至命令参数

三、可能出现的错误

1.C4996

2.C4703

3.Stack overflow

四、成功编译运行、输出结果

五、参考博客


一、前期准备

周锋博士在2017年开源了一个项目:多系统 GNSS 非差非组合精密单点定位软件GAMP

GAMP: An open-source software of multi-GNSS precise point positioning using undifferenced and uncombined observations

下载地址:GAMP: An open-source software of multi-GNSS precise point positioning using undifferenced and uncombined observations

点击此处即可下载解压包:

下载完成之后,解压文件夹如下图所示:

二、调试详细步骤

1.VS中新建项目

打开VS2019/VS2022,新建一个Visual C++的空项目,保存路径和名称自行设定;

2.复制源码至项目文件夹

将GAMP -> mannual_GAMP -> GAMP_src -> Windows -> gamp_c 下的gamp_src文件夹复制到所建项目路径下,将测试数据也一并复制过来,即:GAMP -> mannual_GAMP -> Examples下的 2017244 文件夹

图片下面的那行红字书写有误,”原文件中的 gamp_src文件“

3.将源码中“.c”文件和“.h”文件添加至项目指定位置

【鼠标右键--添加--现有项】-- 选择 “复制到该项目中的gamp_src文件夹”中的 .c 和 .h 文件

添加完成后,如下图:

4.修改项目属性:

(1)【 配置属性 -> C/C++ ->预处理器 ->预处理器定义】添加如下

WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_N
O_WARNINGS;ENAGLO;ENACMP;ENAGAL;ENAQZS;NFREQ=3

     

(2)【配置属性->链接器->调试->生成调试信息】 调整为 生成调式信息(/DEBUG)

(3)【配置属性-> C/C++ ->常规->调试信息格式】调整为 C7

5.添加多线程依赖库

(1)【配置属性-> C/C++ ->常规->附加目录】

将GAMP\mannual_GAMP\GAMP_src\Windows\pthreads-w32-2-9-1-release目录拷贝到C盘
然后在项目中附加目录【配置属性-> C/C++ ->常规->附加目录】 添加

C:\pthreads-w32-2-9-1-release\Pre-built.2\include

(2)【配置属性->链接器->常规->附加库目录】

添加

C:\pthreads-w32-2-9-1-release\Pre-built.2\lib\x86

(3)【属性->链接器->输入->附加依赖项】

添加     

pthreadVSE2.lib

6.头文件dirent.hunistd.h复制VS默认包含目录

将GAMP -> mannual_GAMP -> GAMP_src -> Windows下头文件dirent.hunistd.h复制到vs默认包含目录,我的目录是:D:\Windows Kits\10\Include\10.0.22621.0\ucrt

方法:

在"gamp.h"中  ctrl+鼠标左键  选中“stdio.h”(或者其他VS自带的头文件),跳转至"stdio.h"文件,

鼠标右键单击 文件名,跳出选项卡,选择"打开所在的文件夹",即可跳转到头文件所在的文件,将dirent.hunistd.h这两个文件复制到该文件夹即可。

7.将配置文件路径添加至命令参数

【右键项目 ->配置属性 -> 调试 -> 命令参数】,将第2步的2017244文件夹下的配置文件 gamp.cfg 路径信息添加进去,我的gamp.cfg文件路径为:E:\GAMP_2023_12_11\Data\2017244\gamp.cfg

更改gamp.cfg文件中的路径信息:

注意:要在数据处理文件夹中创建一个结果文件夹,比如上图中配置文件的结果文件夹名是result,因此要创建一个result文件夹,如下图所示

至此,可以开始编译运行,可能会出现一些错误,可以参考下文。

三、可能出现的错误

1.C4996

错误C4996’sprintf’: This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.pppc:\users\cugch\desktop\gamp\test\ppp\ppp\gamp_src\gamppos.c374

解决方法:(最好下面两个都试试)

(1)【项目属性->配置属性->C/C+±>预处理器->预处理定义】添加两个宏

_CRT_SECURE_NO_DEPRECATE
_SCL_SECURE_NO_DEPRECATE

(2)屏蔽出4996错误,即在头文件之前加上以下一行代码#pragma warning(disable:4996)  

注:我使用了这个方法,然后就没有该错误了

2.C4703

错误C4703使用了可能未初始化的本地指针变量“lam”ppp gamppos.c571

解决方法

转到 lam 定义发现确实没有初始化,而是在后面直接赋值;修改代码,初始化的时候指向NULL;

3.Stack overflow

0x00007FF7AA935407 处有未经处理的异常(在 GAMP_2023_12_11.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x00000094B1403000)。

出现位置是该行:

这个问题出现后我没有解决,但是后续我在解决其他问题的时候这个问题又消失了,我也不清楚怎么弄的,有这个问题的朋友可以先解决其他问题或者重启电脑或者等短时间再编译,说不定就好了。

四、成功编译运行、输出结果

修改完上述错误之后,点击”本地Windows调试器“运行程序,注意选择 x64 

在项目属性页,配置选择"活动(Debug)",平台选择"Win32"

运行窗口如下,可见其正在处理第一个观测值文件:

执行完毕之后,可见整个程序运行时间为94.169s,如下图所示:

输出文件夹 result 中存放着刚刚生成的数据信息:

至此,整个调试过程全部完成,后续可以自行下载数据进行处理。

五、参考博客:

VS中报错C4996 scanf错误&错误介绍&解决方案_c4996怎么解决-CSDN博客

GAMP编译点滴_函数使用堆叠的 "24580" 字节。请考虑将一些数据移动到-CSDN博客

GAMP|Visual Studio 2019环境下配置GAMP-CSDN博客

100-GAMP安装调试细则_gamp调试全部出现pdop错误-CSDN博客

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品固件烧写方案

1、前言 一成熟的量产的嵌入式产品,软件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。 因此,在发布固件的时候&a…

12.11 C++ 作业

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&#xf…

[UNILM]论文实现:Unified Language Model Pre-training for Natural Language.........

文章目录 一、完整代码二、论文解读2.1 介绍2.2 架构2.3 输入端2.4 结果 三、过程实现四、整体总结 论文:Unified Language Model Pre-training for Natural Language Understanding and Generation 作者:Li Dong, Nan Yang, Wenhui Wang, Furu Wei, Xia…

编程实战:自己编写HTTP服务器(系列4:查看文件、下载等一般功能)

系列入口:编程实战:自己编写HTTP服务器(系列1:概述和应答)-CSDN博客 本文介绍各种功能的实现。大部分是特定内置入口。 目录 一、默认页 二、查看文件 三、关闭服务 四、下载页面 一、默认页 前面在已经介绍过重定…

UE4/UE5 修改/还原场景所有Actor的材质

使用蓝图方法: 1.修改场景所有Actor 材质: Wirframe:一个材质类 MatList:获取到的所有模型的全部材质 的列表 TempAllClass:场景中所有获取的 Actor 的列表 功能方法如下: 蓝图代码可复制在&#xff1a…

MongoDB在Windows系统和Linux系统中实现自动定时备份

本文主要介绍MongoDB在Windows系统和Linux系统中如何实现自动定时备份。 目录 MongoDB在Windows系统中实现自动定时备份MongoDB在Linux系统中实现自动定时备份备份步骤备份恢复 MongoDB在Windows系统中实现自动定时备份 要在Windows系统中实现自动定时备份MongoDB数据库&#…

界面控件DevExpress中文教程 - 如何用Office File API组件填充PDF表单

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

《Spring Cloud Alibaba 从入门到实战》分布式消息(事件)驱动

分布式消息(事件)驱动 1、简介 事件驱动架构(Event-driven 架构,简称 EDA)是软件设计领域内的一套程序设计模型。 这套模型的意义是所有的操作通过事件的发送/接收来完成。 传统软件设计 举个例子,比如一个订单的创建在传统软…

【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 NLP 部分

【CCF BDCI 2023】多模态多方对话场景下的发言人识别 Baseline 0.71 NLP 部分 概述NLP 简介文本处理词嵌入上下文理解 文本数据加载to_device 函数构造数据加载样本数量 len获取样本 getitem 分词构造函数调用函数轮次嵌入 RobertaRoberta 创新点NSP (Next Sentence Prediction…

如何将用户有过行为的item用list形式记录下来,另外如何计算list里的个数

导语: 最近做项目,发现有些语法想一想是知道,但实际操作起来跟想的情况不一样哈哈。不是遇见bug就是输出的结果不是自己想要的,CSDN跟知乎找了很多没怎么解决,后面多摸索多实操终于解决! test_data[item_…

Oracle中LISTAGG 函数 的使用

概念:对于查询中的每个组,LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序,然后将值串联成一个字符串

Appium微信小程序自动化环境准备

一、前置说明 微信从8.0.19开始内核从x5换成xweb之后,原先的开启webview调试的原方案已经会报503错误。 点击下面的链接,都会报503错误: http://debugmm.qq.com/?forcex5ture http://debugx5.qq.com 微信内核升级为xweb之后,需要…

数据结构之----逻辑结构、物理结构

数据结构之----逻辑结构、物理结构 目前我们常见的数据结构分别有: 数组、链表、栈、队列、哈希表、树、堆、图 而它们可以从 逻辑结构和物理结构两个维度进行分类。 什么是逻辑结构? 逻辑结构是指数据元素之间的逻辑关系,而逻辑结构又分为…

有趣的数学 数学建模入门三 数学建模入门示例两例 利用微积分求解

一、入门示例1 1、问题描述 某宾馆有150间客房,经过一段时间的经营,该宾馆经理得到一些数据:如果每间客房定价为200元,入住率为55%;定价为180元,入住率为65%;定价为160元…

PyTorch张量:内存布局

你可能对 torch 上的某些函数感到困惑,它们执行相同的操作但名称不同。 例如: reshape()、view()、permute()、transpose() 等。 这些函数的做法真的不同吗? 不! 但为了理解它,我们首先需要了解一下张量在 pytorch 中…

AR-LDM原理及代码分析

AR-LDM原理AR-LDM代码分析pytorch_lightning(pl)的hook流程main.py 具体分析TrainSampleLightningDatasetARLDM blip mm encoder AR-LDM原理 左边是模仿了自回归地从1, 2, ..., j-1来构造 j 时刻的 frame 的过程。 在普通Stable Diffusion的基础上,使用了1, 2, .…

人工智能|深度学习——知识蒸馏

一、引言 1.1 深度学习的优点 特征学习代替特征工程:深度学习通过从数据中自己学习出有效的特征表示,代替以往机器学习中繁琐的人工特征工程过程,举例来说,对于图片的猫狗识别问题,机器学习需要人工的设计、提取出猫的…

产品<Axure的安装以及组件介绍

Axure介绍: Axure是一款用户体验设计工具,可以用于创建交互式原型、线框图和设计文档。它支持快速原型开发、界面设计、信息架构、流程图和注释等功能,可以帮助设计师快速地创建和共享交互式原型,从而更好地与客户和团队协作。 …

从 MQTT、InfluxDB 将数据无缝接入 TDengine,接入功能与 Logstash 类似

利用 TDengine Enterprise 和 TDengine Cloud 的数据接入功能,我们现在能够将 MQTT、InfluxDB 中的数据通过规则无缝转换至 TDengine 中,在降低成本的同时,也为用户的数据转换工作提供了极大的便捷性。由于该功能在实现及使用上与 Logstash 类…

「差生文具多系列」推荐两个好看的 Redis 客户端

📢 声明: 🍄 大家好,我是风筝 🌍 作者主页:【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。 直达博主:「…