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

标签 c++ g++ eigen eigen3

我有以下使用特征的测试程序:

#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/

相关文章:

c++ - SDL2 : how to raise window (on top of calling terminal)

c++ - .text节的开头/结尾有多余的空间

c++ - libtorrent-rasterbar7 : g++ linker unable to find libtorrent/session. hpp

c++ - 为什么必须在第一行设置 _GLIBCXX_DEBUG?

c++ - Eigen - 将每个(稀疏)矩阵行除以其对应的对角线元素

c++ - 从 C++ 调用 Python

c++ - jsoncpp - 由于类型不完整,无法定义 Json::Reader

c++ - g++ -O3 比 -O2 优化得更好,添加了所有额外的优化

c++ - 将 Boost 累加器与 Eigen::Vector 类型一起使用

c++ - 在 OpenCV 中执行 Eigenfaces 算法时出错