当前位置: 首页 > news >正文

使用openMVS库,在VS2022中启用c++17标准编译仍然报错

使用openMVS库,在VS2022中启用c++17标准编译仍然报错

现象

项目中引用了某些开源库(例如openmvs2.1.0),编译时要求启用编译器对c++17的支持。

没问题!大家都知道在下图所示的位置调整C++语言标准:
在这里插入图片描述
但是,打开开关之后编译,依然报错:

在这里插入图片描述
这可真是一个令人百思不得其解的错误啊。报错的文件是官方的头文件type_traits,双击之后跳转的错误位置也看不出个所以然。

在这里插入图片描述
这下头大了。不过,之前编译openmvs库时,用的是同一版本的VS编译器,怎么就成功了呢?于是查看vcpkg自动编译openmvs时用cmake配置生成的CMakeCache.txt中的编译选项,才找到了真正原因,如下图所示:

在这里插入图片描述
图中标出来的选项是cmake生成的,并不常见,至少在VS2022中没有提供开关,而只能靠用户手动输入到属性页、C/C++、命令行的其他选项框中。

报错原因:__cplusplus

__cplusplus宏是MSVC编译器预定义的宏,它的值是许多语法特性的开关。前面讲了,要启用c++17标准,就在C++语言标准设置好即可。然而,__cplusplus宏值不随上面的C++语言标准/std 选项)设置而改变,需要同时添加:/Zc:__cplusplus编译选项,才能随着语言标准而改变,如下表所示:

/Zc:__cplusplus 选项/std 选项__cplusplus 值
Zc:__cplusplus/std:c++14(默认值)201402L
Zc:__cplusplus/std:c++17201703L
Zc:__cplusplus/std:c++20202002L
Zc:__cplusplus/std:c++latest当前最新日期,目前是202002L
Zc:__cplusplus-(已禁用)任何值199711L
未指定任何值199711L

表中的/std 选项就是上一节的C++语言标准属性。
可见,如果没有添加/Zc:__cplusplus__cplusplus宏的值始终都是199711L,启用的c++17标准也是不完整的。微软这么操作的理由是:有很多老代码写得不规范(不符合语言标准),之前版本的编译器(由于对语言标准的遵守不严格)能编译通过,我们希望使用新编译器时它们的改动也尽可能小。
于是,本来支持严格的标准C++语法的编译器的默认状态仍和原来一样,__cplusplus宏的值始终是199711L;直到开发者在编译器的命令行中加入/Zc:__cplusplus,它才真正变成实际使用语言标准的值。

其实多数情况下,__cplusplus宏的值对代码编译影响不大。但是很多高水平开源库使用了新语法,恰恰需要__cplusplus宏的值符合语言标准(/std 选项)才能编译通过,这是对开源开发者很不友好的。

P.S. 官方的愿景是,有朝一日仅需要设定/std 选项__cplusplus宏的值就随之改变,不需要额外添加/Zc:__cplusplus

解决方法

属性页—C/C++—命令行—其他选项中添加:/Zc:__cplusplus。重新编译,即可。

在这里插入图片描述

扩展阅读

/Zc-cplusplus的微软官方说明
C++语言标准切换选项
官方:终于能正确设定__cplusplus值了

用/std选项确定c/c++语言标准
强制符合语法标准选项/permissive-

一点认识:MSVC的C/C++编译器默认情况下实现了当前标准和未来一些标准中的语法。当指定语言标准为默认的/std:c++14时,大部分新标准的语法将被禁用,但仍有一部分在引入/std选项之前就实现的新语法标准可用。
但指定/std:c++xx(xx>14)时,新实现的c++xx以后的语法将不可用。

相关文章:

使用openMVS库,在VS2022中启用c++17标准编译仍然报错

使用openMVS库,在VS2022中启用c17标准编译仍然报错 现象 项目中引用了某些开源库(例如openmvs2.1.0),编译时要求启用编译器对c17的支持。 没问题!大家都知道在下图所示的位置调整C语言标准: 但是&#…...

uniGUI之上传文件UniFileUploadButton

TUniFileUploadButton主要属性: Filter: 文件类型过滤,有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸; Message:标题以及消息文本,可翻译成中文 TUniFileUploadButton控件 支持多…...

福德植保无人机工厂:创新科技与绿色农业的完美结合

亲爱的读者们,欢迎来到福德植保无人机工厂的世界。这里,科技与农业的完美结合为我们描绘出一幅未来农业的新篇章。福德植保无人机工厂作为行业的领军者,以其领先的无人机技术,创新的理念,为我们展示了一种全新的农业服…...

JsRpc技术服务搭建,最简单的JSRPC,Flask+undetected-chromedriver

只需10来行代码快速实现JSRpc,最简单的JSRPC 使用Flask和undetected-chromedriver快速实现JsRpc 推荐Python版本3.7.x及以上,需要pip安装 pip install Flask pip install undetected-chromedriver __author__ jiuLiang __email__ "jiuliangef…...

<优化接口设计的思路>:接口安全

前言 一、接口安全的方式   1. 身份认证,鉴别客户端   2. 请求过程鉴权,防止请求被篡改   3. 访问控制,即控制客户端对API的访问权限 前言 某家电商平台上,用户可以通过客户端发起购物请求,并对所选商品进行下…...

Gitee基础知识

目录 1-gitee 1.1gitee介绍 1.2git与gitee的关系 1.3在国内为什么选择Gitee 2-注册与创建远程仓库 2.1注册 2.2创建远程仓库 2.3配置ssh公钥 2.3.1公钥的生成方法: 2.3.2 在gitee中配置公钥 2.3.4验证公钥 3-添加与推送远程仓库master 3.1基本命令…...

网络空间搜索引擎- FOFA的使用技巧总结

简介 FOFA是一款网络空间测绘的搜索引擎,旨在帮助用户以搜索的方式查找公网上的互联网资产。 FOFA的查询方式类似于谷歌或百度,用户可以输入关键词来匹配包含该关键词的数据。不同的是,这些数据不仅包括像谷歌或百度一样的网页,还…...

用户行为分析遇到的问题-ubantu16,hadoop3.1.3

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅:大数据课程实验案例:网站用户行为分析(免费共享) 用户行为分析-小…...

camera曝光时间

曝光和传感器读数 相机上的图像采集过程由两个不同的部分组成。第一部分是曝光。曝光完成后,第二步就是从传感器的寄存器中读取数据并传输(readout)。 曝光:曝光是图像传感器进行感光的一个过程,相机曝光时间&#xf…...

Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码

问题 今天在代码里面输出 console.log 信息直接指向了 vue.js,并且代码里面写了 debgger 也不生效 解决 f12 找到浏览器的这个设置图标 找到这个 ignore list 的 custom exclusion rules 取消掉 /node_modules/|/bower_components/ 这样就正常了...

翻译: ChatGPT Token消耗粗略计算英文就是除以四分之三

在这个视频中,我想带你快速浏览一些例子,以建立对在软件应用中使用大型语言模型的实际成本的直观感受。让我们来看看。这是一些示例价格,用于从不同的大型语言模型获取提示和回应,这些模型对开发者可用。即,如果你在你…...

【线性代数】期末速通!

1. 行列式的性质 1.1 求一个行列式的值 特殊地,对角线左下全为0,结果为对角线乘积。行 r 列 c 1.2 性质 某行(列)加上或减去另一行(列)的几倍,行列式不变某行(列)乘 …...

速盾网络:业务卓越,数字安全的领先者

在数字时代的浪潮中,业务成功需要强大的数字基石。速盾网络以其出色的CDN加速、高防IP、SDK游戏盾和抗DDoS攻击等业务,成为业界领先的数字安全保障者,为您的业务提供全方位的支持与保护。 CDN加速:业务飞跃的翅膀 速盾网络以全球…...

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布,线性回归模型就不再适用(下图左),而采用多项式回归可能更好(下图右)。例…...

智能优化算法应用:基于蛾群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蛾群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蛾群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蛾群算法4.实验参数设定5.算法结果6.参考文献7.MA…...

Tekton 克隆 git 仓库

Tekton 克隆 git仓库 介绍如何使用 Tektonhub 官方 git-clone task 克隆 github 上的源码到本地。 git-clone task yaml文件下载地址:https://hub.tekton.dev/tekton/task/git-clone 查看git-clone task yaml内容: 点击Install,选择一种…...

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…...

YoloV8改进策略:ASF-YOLO,结合了空间和尺度特征在小目标和密集目标场景有效涨点

摘要 本文提出了一种新型的Attentional Scale Sequence Fusion based You Only Look Once (YOLO)框架(ASF-YOLO),该框架结合了空间和尺度特征,以实现准确且快速的细胞实例分割。该框架建立在YOLO分割框架之上,采用Scale Sequence Feature Fusion (SSFF)模块增强网络的多尺…...

OpenCV-8RGB和BGR颜色空间

一. RGB和BGR 最常见的色彩空间就是RGB,人眼也是基于RGB的色彩空间去分辨颜色。 OpenCV默认使用的是BGR. BGR和RGB色彩空间的区别在于图片在色彩通道上的排列顺序不同。 二.HSV, HSL和YUV 1.HSV(HSB) OpenCV用的最多的色彩空间是HSV. Hue:色相&…...

阿里云主导《Serverless 计算安全指南》国际标准正式立项!

日前,在韩国召开的国际电信联盟电信标准分局 ITU-T SG17 全会上,由阿里云主导的《Serverless 计算安全指南》国际标准正式立项成功。 图 1 项目信息 在现今数字化时代,Serverless 计算正逐渐成为云计算的一个新的发展方向,其灵活…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...