我有以下使用特征的测试程序:
#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
编译它。
但是,如果我不指定包含标志,则编译命令将不起作用。这对我来说似乎很奇怪,因为我认为编译器会自动拾取 /usr/include
下的任何 header (例如 Boost header ,也位于 /usr/include
,工作得很好,无需告诉编译器在哪里寻找它们)。我需要对特征设置进行哪些更改,以便不必在编译命令中指定 -I 标志?
最佳答案
如果更换
#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 的平台,如果您想避免硬编码的包含路径,它是一个很好的选择。
关于c++ - 如何使用 eigen 编译 C++ 程序而不指定 -I 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984971/