Как скомпилировать программу на C ++, используя eigen без указания флага -I?

У меня есть следующая тестовая программа, использующая eigen:

#include <iostream>
#include <Eigen/Dense>

using namespace std;
using Eigen::MatrixXd;

int main() {
MatrixXd m(2, 2);
m(0, 0) = 3;
m(1, 0) = 2.5;
m(0, 1) = -1;
m(1, 1) = m(1, 0) + m(0, 1);
cout << m << endl;
}

и я могу скомпилировать это с g++ -I/usr/include/eigen3/ test1.cpp,

Однако команда compile не работает, если я не укажу флаг включения. Это кажется странным для меня, потому что я думал, что любые заголовки под /usr/include будет автоматически выбран компилятором (например, заголовки Boost, также расположенные под /usr/include, прекрасно работают без необходимости указывать компилятору, где их искать). Какие изменения мне нужно внести в собственную настройку, чтобы мне не нужно было указывать флаг -I в команде компиляции?

2

Решение

Если вы замените

#include <Eigen/Dense>

от

#include <eigen3/Eigen/Dense>

ваш код скомпилируется. Другими словами, проблема в том, что вы включаете <Eigen/Dense> который находится в каталоге /usr/include/eigen3, но компилятор только ищет в /usr/include по умолчанию.

Я бы рекомендовал использовать флаги включения вместо <eigen3/Eigen/Dense>поскольку это более переносимо между дистрибутивами, операционными системами и т. д. и, как правило, проще настроить компиляцию для других сред. Eigen3 поставляется с файлами pkg-config, которые очень просты в использовании и переносимы. Компилирование с

g++ $(pkg-config --cflags eigen3) test1.cpp

будет работать на всех платформах, где доступен pkg-config, и это отличная альтернатива для вас, если вы хотите избежать жестко запрограммированных путей включения.

8

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector