如何使用eigen编译C ++程序而不指定-I标志?

时间:2014-02-24 10:25:31

标签: c++ g++ eigen eigen3

我使用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编译它。

但是,如果我没有指定include标志,则编译命令不起作用。这对我来说似乎很奇怪,因为我认为/usr/include下的任何头文件都会被编译器自动拾取(例如Boost头文件,也位于/usr/include下,工作完全正常,无需告诉编译器在哪里寻找他们)。我需要对特征设置做出哪些更改,因此我不必在编译命令中指定-I标志?

1 个答案:

答案 0 :(得分:8)

如果您更换

#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可用,如果你想避免使用硬编码的包含路径,它可以替代你。