Pau*_*scu 4 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;
}
Run Code Online (Sandbox Code Playgroud)
我可以编译它g++ -I/usr/include/eigen3/ test1.cpp.
但是,如果我没有指定include标志,则编译命令不起作用.这对我来说似乎很奇怪,因为我认为/usr/include编译器会自动拾取任何标题(例如Boost标题,也位于其下/usr/include,工作完全正常,无需告诉编译器在哪里查找它们).我需要对特征设置进行哪些更改,因此我不必在编译命令中指定-I标志?
如果你更换
#include <Eigen/Dense>
Run Code Online (Sandbox Code Playgroud)
通过
#include <eigen3/Eigen/Dense>
Run Code Online (Sandbox Code Playgroud)
你的代码将编译.换句话说,问题是您包含<Eigen/Dense>目录中的内容/usr/include/eigen3,但编译器仅/usr/include默认搜索.
我建议使用包含标志,而不是包含<eigen3/Eigen/Dense>,因为这在分发,操作系统等方面更易于移植,并且通常,更容易为其他环境配置编译.Eigen3附带pkg-config文件,非常易于使用和携带.用.编译
g++ $(pkg-config --cflags eigen3) test1.cpp
Run Code Online (Sandbox Code Playgroud)
将在所有平台上运行,其中pkg-config可用,如果你想避免使用硬编码的包含路径,它可以替代你.