使用g++以C++20标准编译含ONNX Runtime头文件的程序报错
问题原因分析:g12 + ONNX Runtime 1.20.1 启用C20编译报错
ONNX Runtime 1.20.1头文件的C++20兼容性缺失
ONNX Runtime 1.20.1的C++ API头文件中,部分API的声明依赖条件编译逻辑,而这些逻辑未充分适配C20标准。以OrtApi::ReleaseAvailableProviders为例,该成员的声明可能被包裹在仅针对C17及以下版本的编译块中,当启用-std=c++20时,这部分代码会被编译器跳过,导致结构体成员未被声明。g12对C20标准的严格实现
g12对C20标准的支持非常彻底,会严格按照标准处理头文件中的宏展开与语法检查。ONNX Runtime 1.20.1发布时,可能未针对g12 + C20的组合做充分测试,头文件中用于判断C版本的宏(如__cplusplus)逻辑存在漏洞——比如仅判断到__cplusplus >= 201703L的场景,未覆盖C20的202002L值,导致适配代码未触发。默认编译标准的适配差异
不指定-std=c++20时,g12默认采用C17兼容模式编译,此时ONNX Runtime头文件会进入适配C++17的代码分支,所有API声明正常生效,因此编译无报错。
内容的提问来源于stack exchange,提问作者Andrei Popescu
相关产品推荐
相关产品推荐

