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

目录

一、前期准备

二、调试详细步骤

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.mzph.cn/news/215738.shtml

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

相关文章

《C++ Primer》第12章 动态内存(二)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 12.1.5 unique_ptr(P417) unique “拥有”它所指向的对象,某个时刻只能有一个 unique_ptr 指向一个给定对象。 当我们定义一个 unique_ptr 时,需要将其绑定到…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在,那么地图视角是如何让实现的呢? 这一期教大家制作一个简易的小地图。 💖点关注,不迷路。 老样子,我们还…

Leetcode 131 分割回文串

题意理解: 分割回文子串,可以看作是划分连续的字幕组合——所以也可以用回溯的方法来解决 每个位置选与不选——该位置切割|不切割 对于每一段子串——>判断是否是回文串: 是: 继续切割 不是: 剪枝 解题方法…

Ubuntu Destktop 22.04 设置 ssh 超时时间

Ubuntu Destktop 22.04 使用 ssh 连接服务器时,发现一段时间不操作就会自动断开连接,解决方法如下: 打开 /etc/ssh/ssh_config 文件: sudo vim /etc/ssh/ssh_config在文件最后添加: # ssh 客户端会每隔 30 秒发送一…

在线免费制作各种证件照,有需要的收藏

现在很多场合都需要一寸证件照,比如办理身份证、出国签证等。以往,我们都需要到专门的照相馆拍摄,但是现在,有了随时照微信小程序(抖音和支付搜索亿鸣证件照哦),你可以足不出户就能够制作一寸证…

MySQL InnoDB Replication部署方案与实践

1. 概述 MySQL Innodb ReplicaSet 是 MySQL 团队在 2020 年推出的一款产品,用来帮助用户快速部署和管理主从复制,在数据库层仍然使用的是主从复制技术。 ReplicaSet 主要包含三个组件:MySQL Router、MySQL Server 以及 MySQL Shell 高级客户…

12 位多通道国产芯片ACM32F403/F433 系列,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构,支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理,支持单精度FPU处理浮点数据,同时还支持Memory Protection Unit (MPU)用于提升应用的…

PyTorch张量:内存布局

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

1 CPU实现的基本框图

汇编语言 && 指令格式 CPU设计的框架:三级流水线 ROM存放指令和数据,大端模式&小端模式,地址对齐 取指 译码: 执行: 汇编语言 & 指令格式 流水线实现工作机制 模块功能划分&接口信号 参考…

strict-origin-when-cross-origin

严格限制同源策略 (1)允许服务器的同源IP地址访问 (2)允许Referer --- 后端服务器要配置

linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行

sed系列文章 linux常用命令(9):sed命令(编辑/替换/删除文本)linux sed命令删除一行/多行_sed删除第一行/linux删除文件某一行 文章目录 sed系列文章一、sed删除某一行内容/删除最后一行二、sed删除多行三、扩展3.1、-i命令 本文主要讲解如何删除txt文件中的某一行内…

企业使用APP自动化测试工具的重要因素

随着移动应用市场的蓬勃发展,企业对高质量、高效率的软件交付提出了更高的要求。在这个背景下,APP自动化测试工具成为了企业不可或缺的一部分。以下是企业采用APP自动化测试工具的关键因素: 1. 快速且可重复的测试执行 自动化测试工具能够快速…

做数据分析为何要学统计学(5)——什么问题适合使用卡方检验?

卡方检验作为一种非常著名的非参数检验方法(不受总体分布因素的限制),在工程试验、临床试验、社会调查等领域被广泛应用。但是也正是因为使用的便捷性,造成时常被误用。本文参阅相关的文献,对卡方检验的适用性进行粗浅…

原来使用代码也可以画时序图,用这个Mermaid就行,真香

本文首发于我的个人掘金博客,看到很多人都比较喜欢这篇文章,分享给大家。 个人博客主页:https://www.aijavapro.cn 个人掘金主页:juejin.cn/user/2359988032644541/posts 个人知识星球: 觉醒的新世界程序员 一、背景 在软件开发和…

spring数据校验

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 本…

数据库(一)| 数据库概述、基本概念、关系型数据库特点、超键候选码等

文章目录 1 数据库的一些基础概念1.1 数据库和数据库管理系统1.2 关系模式和关系实例1.3 数据库模式和数据库实例 2 数据库组织形式2.1 数据采用文件的缺点2.2 使用数据库管理系统的 优点 3 关系型数据库特点4 三个层次的数据抽象Data Abstraction5 超键、候选码、主码、外码 1…

php之jwt使用

PHP JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。JWT是一个包含有关用户或实体身份信息的安全令牌,它由三部分组成:头部(Header)、载荷(Payload)和签名(Sig…

计算机网络编程

网络编程 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机, Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 计算机网络基础 2. So…

数据结构基础介绍

一.起源及重要性 1968 年,美国的高德纳 Donakl E . Kn uth 教授在其所写的《 计算机程序艺术》第一卷《基本算法 》 中,较系统地阐述了数据的逻辑结构和存储结构及其操作, 开创了数据结构的课程体系 ,数据结构作为一门独立的…

B029-JDBC增强

目录 PreparedStatement 查询1.sql注入2.Statement分析 (面试题)3.PreparedStatement (面试题) 登录功能的完善事务链接池概念实现DBCP连接池实现第一种配置方式第二种配置方式 返回主键BaseDao的抽取 PreparedStatement 查询 1.sql注入 就是在sql的字符串拼接的时候&#xf…