Какой компилятор кодового блока необходим для использования Eigen C ++? - PullRequest
0 голосов
/ 11 декабря 2019

В настоящее время я использую 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 <1>", строка 57

"неопределенная ссылка на Eigen :: fix <0>"

Обновление 2: , используя второй пример A.ldlt().solve(b), я получаю это:

"[пропуск 3 контекстов создания экземпляра, используйте -ftemplate-backtrace-limit = 0 для отключения]", строка 100

"[пропуск 3 контекстов создания экземпляра, используйте -ftemplate-backtrace-limit = 0 для отключения]", строка 90

...

Обновление 3: Полный код + компилятор: буквально один файл main.cpp + добавление собственной папки в каталог поиска

` #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;
}`

1 Ответ

0 голосов
/ 11 декабря 2019

Решение: Я просто замечаю, что программа действительно успешно компилируется, но просто она всегда выдает ошибку "[пропуск 3 контекстов создания экземпляра, используйте -ftemplate-backtrace-limit = 0 для отключения]", строка 100, файл CoreEvaluators.h

Так что обычный компилятор MinGW для Codeblock все еще работает. Просто он всегда выдает эту ошибку (+ 20-секундная длинная компиляция, когда он выводит кучу сообщений, как указано выше).

Обновленное решение: О, Боже мой, я чувствую себя настолько глупым. Отключить следующее предупреждение:

Включить предупреждения Effective-C ++ (спасибо Скотту Мейерсу) [-Weffc ++].

«Ошибки» (на самом делепредупреждения) больше не являются спамом и программа компилируется немедленно. По некоторым причинам эти предупреждения появляются как ошибки и приводят к внезапному прекращению процесса компиляции (что делает его неудачным). Почти неразрешимая ошибка.

...