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 秒发送一…

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

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

linux shell

文章目录 预设参数脚本自动开终端if语句语法常用判断命令文件/目录判断:字符串判断数值判断逻辑判断 if高级特性: 预设参数 $$ Shell本身的PID(ProcessID)$! Shell最后运行的后台Process的PID$? 最后运行的命令的结束代码&#…

MySQL InnoDB Replication部署方案与实践

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

eventBus父组件$emit一次子组件多次收到¥

eventBus父组件$emit一次子组件多次收到$on 参考(EventBus踩坑1-CSDN博客) 父组件emit出了事件,这个过程需要一定时间,这段时间过长,子组件还未接收到父组件的emit,父组件认为子组件没有收到,…

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

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

Java - Mybatis借助PageHelper实现分页,集成SpringBoot

未使用SpringBoot 第⼀步&#xff1a;引⼊依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.1</version> </dependency> 第⼆步&#xff1a;在mybatis-config.xml…

PyTorch张量:内存布局

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

1 CPU实现的基本框图

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

Linux中用rpm管理软件

本章主要介绍使用rpm对软件包进行管理 使用rpm查询软件的信息使用rpm安装及卸载软件使用rpm对软件进行更新使用rpm对软件进行验证 rpm 全称是redhat package manager&#xff0c;后来改成rpm package manager&#xff0c;这是根据源 码包编译出来的包。先从光盘中拷贝一个包&…

strict-origin-when-cross-origin

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

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

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

vite+ts——user.ts——ts接口定义+axios请求的写法

import axios from axios; import qs from query-string; import {UserState} from /store/modules/user/types;export interface LoginData{username:string;password:string;grant_type?:string;scope?:string;client_id?:string;client_secret?:string;response_type?:…

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

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

Docker入门概念

文章目录 容器&#xff08;container&#xff1a;容器/集装箱&#xff09;技术虚拟机解决了哪些部署问题docker解决了哪些部署问题docker是如何做到容器间运行时环境隔离的docker基本概念docker基本使用 容器&#xff08;container&#xff1a;容器/集装箱&#xff09;技术 容…

奥威亚视频云平台VideoCover.aspx 接口任意文件上传漏洞复现 [附POC]

文章目录 奥威亚视频云平台VideoCover.aspx 接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议奥威亚视频云平台VideoCover.aspx 接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责…

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

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