我正在尝试编译一个包含特征库的项目,我得到这个错误:
In file included from /home/--/--/--/Eigen/Core:19,
from /home/--/--/--/Eigen/Geometry:11,
from /usr/include/rl-0.7.0/rl/math/Transform.h:34,
from /home/--/--/--/example.cpp:2:
/home/--/--/--/Eigen/src/Core/util/Macros.h:674:2: error: #error This compiler appears to be too old to be supported by Eigen
674 | #error This compiler appears to be too old to be supported by Eigen
| ^~~~~
我正在使用:
Ubuntu 20.04- Cmake 3.16.3
- VSCode Compiler GCC 10.3.1
- 特征3.4.90
这个问题似乎与Macros.h文件中的这些行有关:
// The macros EIGEN_HAS_CXX?? defines a rough estimate of available c++ features
// but in practice we should not rely on them but rather on the availability of
// individual features as defined later.
// This is why there is no EIGEN_HAS_CXX17.
#if EIGEN_MAX_CPP_VER<14 || EIGEN_COMP_CXXVER<14 || (EIGEN_COMP_MSVC && EIGEN_COMP_MSVC < 1900) ||
(EIGEN_COMP_ICC && EIGEN_COMP_ICC < 1500) || (EIGEN_COMP_NVCC && EIGEN_COMP_NVCC < 80000) ||
(EIGEN_COMP_CLANG && ((EIGEN_COMP_CLANG<309) || (defined(__apple_build_version__) && (__apple_build_version__ < 9000000)))) ||
(EIGEN_COMP_GNUC_STRICT && EIGEN_COMP_GNUC<51)
#error This compiler appears to be too old to be supported by Eigen
#endif
你知道如何修复这个错误吗?
正如@Lala5th建议的那样,通过改变c++标准,问题就解决了。
我已经修改了CMakeLists.txt:
来自:
set(CMAKE_CXX_STANDARD 11)
:
set(CMAKE_CXX_STANDARD 17)
(也适用于14)
正如您所注意到的,Macros.h文件告诉我们问题出在编译器版本上。
VSCode编译器GCC 10肯定支持c++17。这意味着你应该改变它的起始标志。在设置。在Json文件中添加以下行:
"code-runner.executorMap": {
"cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
},
根据这个答案
标准Bash的g++
使用g++与-std=c++17
标记。
我浪费了两天时间在这个问题上,尝试了公认的答案,但下面的事情对我有效。当我用c++
构建opencv时,遇到了同样的问题。@Lala5th建议使用
使用-DCMAKE_CXX_STANDARD=14或-DCMAKE_CXX_STANDARD=17构建项目
。e用cmake pathToFile -DCMAKE_CXX_STANDARD=17
代替cmake pathToFile