首页 > 解决方案 > 如何在 Oct 文件中使用 C++17 功能

问题描述

我正在尝试std::optional在 GNU Octave 的 Oct 文件中使用(C++17 功能)。我已升级到 g++ 版本 9.1.0 并将 linux 环境变量 'CC' 和 'CXX' 分别设置为/usr/bin/gcc/usr/bin/g++。在 Octave 中运行getenv这些变量表明设置了正确的编译器。但是,在运行“mkoctfile”时,出现以下错误:

oct_interface.cpp: In function ‘octave_value_list Fmibc(const octave_value_list&, int)’:
oct_interface.cpp:863:10: error: ‘optional’ is not a member of ‘std’
  863 |     std::optional<double> dub_opt = {};
      |          ^~~~~~~~
oct_interface.cpp:863:10: note: ‘std::optional’ is only available from C++17 onwards
oct_interface.cpp:863:19: error: expected primary-expression before ‘double’
  863 |     std::optional<double> dub_opt = {};
      |                   ^~~~~~
warning: mkoctfile: building exited with failure status

正如评论中所指出的,必须将适当的标志传递给编译器才能使用 C++17 功能。因此,一个更精确的问题可能是如何配置mkoctfile以将-std=c++17标志传递给编译器。

标签: c++c++17octave

解决方案


问题是 C++17 标志没有被传递给编译器,正如 Human-Compiler 在评论中指出的那样。编译器标志可以通过两种方式传递:作为调用 Oct-file 实用程序的一部分,即mkoctfile -std=c++17,或通过设置 Octave 环境变量,即setenv("CXXFLAGS", "-std=c++17")


推荐阅读