再记【fatal error C1001: 内部编译器错误】的一个原因

2023-11-01 21:52

本文主要是介绍再记【fatal error C1001: 内部编译器错误】的一个原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

平台:Windows 11、Visual Studio 2022

报错信息

已启动生成...
1>------ 已启动生成: 项目: PointMatchingModel, 配置: Debug x64 ------
1>PointMatchingModel.cpp
1>C:\tools\vcpkg\installed\x64-windows\include\pcl\registration\impl\ia_fpcs.hpp(236,1): fatal  error C1001: 内部编译器错误。
1>(编译器文件“D:\a\_work\1\s\src\vctools\Compiler\CxxFE\sl\p1\c\error.h”,第 1298)
1> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。
1>如果可以,请在此处提供重现步骤: https://developercommunity.visualstudio.com
1>请选择 Visual C++
1>“帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。
1>已完成生成项目“PointMatchingModel.vcxproj”的操作 - 失败。
========== 生成: 0 成功,1 失败,0 最新,0 已跳过 ==========
========= 生成 开始于 15:02,并花费了 06.996 秒 ==========

问题分析

该问题类型为内部编译器错误。

但 Visual Studio 并没有检测出代码的语法问题。

导致这个问题的原因比较多,但缺乏足够有用的信息,只能一点点检查。

在《【fatal error C1001: 内部编译器错误】的一个原因》里,我提到是自己写的一个 Lambda 表达式中没写分号 ;

但这次的问题出现在 pcl\registration\impl\ia_fpcs.hpp 上,这是 PCL 官方的文件,讲道理不可能出问题。

国内的网站上无法检索相关的解决办法,所以尝试在外网找找,那就需要先把 Visual Studio 2022 改成英文,然后用英文的报错信息去搜索。

于是按照《Visual studio的中英文切换》中的方式切换为了中文,然后对项目重新编译了一下,希望得到英文版的报错信息后,在外网搜搜。但此时 VS 提供的报错信息的内容比中文版时更丰富了

Build started...
1>------ Build started: Project: PointMatchingModel, Configuration: Debug x64 ------
1>PointMatchingModel.cpp
1>C:\tools\vcpkg\installed\x64-windows\include\pcl\registration\impl\ia_fpcs.hpp(225,7): error C2760: syntax error: '}' was unexpected here; expected 'statement'
1>Done building project "PointMatchingModel.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 15:12 and took 11.141 seconds ==========

找了一下,没找到原因。

看一下 ia_fpcs.hpp 的代码(含行号):

165 ///
166 template <typename PointSource, typename PointTarget, typename NormalT, typename Scalar>
167 void
168 pcl::registration::FPCSInitialAlignment<PointSource, PointTarget, NormalT, Scalar>::
169     computeTransformation(PointCloudSource& output, const Eigen::Matrix4f& guess)
170 {
171   if (!initCompute())
172     return;
173 
174   final_transformation_ = guess;
175   bool abort = false;
176   std::vector<MatchingCandidates> all_candidates(max_iterations_);
177   pcl::StopWatch timer;
178 
179 #pragma omp parallel default(none) shared(abort, all_candidates, timer)                \
180     num_threads(nr_threads_)
181   {
182 #ifdef _OPENMP
183     const unsigned int seed =
184         static_cast<unsigned int>(std::time(NULL)) ^ omp_get_thread_num();
185     std::srand(seed);
186     PCL_DEBUG("[%s::computeTransformation] Using seed=%u\n", reg_name_.c_str(), seed);
187 #pragma omp for schedule(dynamic)
188 #endif
189     for (int i = 0; i < max_iterations_; i++) {
190 #pragma omp flush(abort)
191 
192       MatchingCandidates candidates(1);
193       pcl::Indices base_indices(4);
194       all_candidates[i] = candidates;
195 
196       if (!abort) {
197         float ratio[2];
198         // select four coplanar point base
199         if (selectBase(base_indices, ratio) == 0) {
200           // calculate candidate pair correspondences using diagonal lengths of base
201           pcl::Correspondences pairs_a, pairs_b;
202           if (bruteForceCorrespondences(base_indices[0], base_indices[1], pairs_a) ==
203                   0 &&
204               bruteForceCorrespondences(base_indices[2], base_indices[3], pairs_b) ==
205                   0) {
206             // determine candidate matches by combining pair correspondences based on
207             // segment distances
208             std::vector<pcl::Indices> matches;
209             if (determineBaseMatches(base_indices, matches, pairs_a, pairs_b, ratio) ==
210                 0) {
211               // check and evaluate candidate matches and store them
212               handleMatches(base_indices, matches, candidates);
213               if (!candidates.empty())
214                 all_candidates[i] = candidates;
215             }
216           }
217         }
218 
219         // check terminate early (time or fitness_score threshold reached)
220         abort = (!candidates.empty() ? candidates[0].fitness_score < score_threshold_
221                                      : abort);
222         abort = (abort ? abort : timer.getTimeSeconds() > max_runtime_);
223 
224 #pragma omp flush(abort)
225       }
226     }
227   }
228 
229   // determine best match over all tries
230   finalCompute(all_candidates);
231 
232   // apply the final transformation
233   pcl::transformPointCloud(*input_, output, final_transformation_);
234 
235   deinitCompute();
236 }

根据错误提示,说是 '}' was unexpected here; expected 'statement',尝试把第 224 行注释掉了。然后再编译就成功了。

还是 不知道什么原因

教训:开发工具还是用英文比较好,报错的信息更全。

这篇关于再记【fatal error C1001: 内部编译器错误】的一个原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/326005

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

DAY16:什么是慢查询,导致的原因,优化方法 | undo log、redo log、binlog的用处 | MySQL有哪些锁

目录 什么是慢查询,导致的原因,优化方法 undo log、redo log、binlog的用处  MySQL有哪些锁   什么是慢查询,导致的原因,优化方法 数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。 导致的原因: 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致

SQL2005 性能监视器计数器错误解决方法

【系统环境】 windows 2003 +sql2005 【问题状况】 用户在不正当删除SQL2005后会造成SQL2005 性能监视器计数器错误,如下图 【解决办法】 1、在 “开始” --> “运行”中输入 regedit,开启注册表编辑器,定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVer

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte