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