使用 Eigen C++ 需要哪个代码块编译器?
Posted
技术标签:
【中文标题】使用 Eigen C++ 需要哪个代码块编译器?【英文标题】:Which codeblock compiler is needed to use Eigen C++? 【发布时间】:2019-12-11 15:57:36 【问题描述】:目前,我使用 mingw32-g++.exe(GNU GCC 编译器)作为代码块,使用 -std=C++14。编译器在这里下载:http://www.codeblocks.org/downloads/26
但是,这里所有的教程程序都编译失败:https://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html
#include 已正确完成。只有计算线,如
Matrix2f x = A.ldlt().solve(b);
和 Matrix2f x = A.ldlt().solve(b);
失败。我也尝试过使用 Intel C++ 编译器,但仍然失败。
我应该下载哪些编译器才能使用 Eigen C++?
非常感谢您的帮助
更新1:使用“基本线性求解”示例,我得到这个错误:
文件 IndexedViewHelper.h:
“对 Eigen::fix 的未定义引用”,第 57 行
"未定义对 Eigen::fix 的引用"
更新 2: 使用第二个示例 A.ldlt().solve(b)
,我明白了:
“[跳过 3 个实例化上下文,使用 -ftemplate-backtrace-limit=0 禁用]”,第 100 行
“[跳过 3 个实例化上下文,使用 -ftemplate-backtrace-limit=0 禁用]”,第 90 行
...
更新 3: 完整代码 + 编译器: 从字面上看,只有一个 main.cpp 文件 + 将 eigen 文件夹添加到搜索目录
` #include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main()
Matrix2f A, b;
A << 2, -1, -1, 3;
b << 1, 2, 3, 1;
cout << "Here is the matrix A:\n" << A << endl;
cout << "Here is the right hand side b:\n" << b << endl;
Matrix2f x = A.ldlt().solve(b);
cout << "The solution is:\n" << x << endl;
`
【问题讨论】:
您应该发布编译器错误。 -- 我应该下载哪些编译器才能使用 Eigen C++? -- 我怀疑 Eigen 无法使用任何符合 C++14 的编译器进行编译。 在 Linux 上,我用 gcc 编译 Eigen 从来没有遇到过问题。很可能问题不在编译器选择上 特征库与 g++ 编译器配合得很好!你得到什么错误? 请提供完整简单的测试方案 请逐字显示您正在编译的完整代码,包括项目中的所有文件和您正在调用的编译器命令行以及完整的编译器输出。 【参考方案1】:解决方案:我只是注意到程序实际上编译成功,但它总是给出错误“[跳过3个实例化上下文,使用-ftemplate-backtrace-limit = 0禁用]”,第100行,文件CoreEvaluators .h
所以 Codeblock 的常规 MinGW 编译器仍然有效。只是它总是给出那个错误(+ 20 秒长的编译,它会输出一堆类似上面的消息)。
更新的解决方案:我的天啊,我感觉好愚蠢。 禁用以下警告:
启用 Effective-C++ 警告(感谢 Scott Meyers)[-Weffc++]。
“错误”(实际上是警告)不再是垃圾邮件,程序立即编译。由于某些原因,这些警告显示为错误并导致编译过程突然停止(使其显示为失败)。几乎是一个无法调试的错误。
【讨论】:
“所以现在的问题是” 如果您有新问题,请单独提出问题。 “跳过 3 个实例化上下文” 这必须是较长错误/警告消息的一部分。您可能正在查看“构建消息”选项卡;打开“构建日志”以查看整个消息。 无论如何,我找到了解决方案。警告设置是如此愚蠢的错误。感谢您的帮助! @user3192711 下次您提出问题时:这正是我们要求完整编译器输出和完整编译器调用的原因。看到这一点会使问题立即变得明显。以上是关于使用 Eigen C++ 需要哪个代码块编译器?的主要内容,如果未能解决你的问题,请参考以下文章