预编译头文件

时间:2020-07-29 09:17:51

标签: c++ g++ eigen precompile

我有一个简单的头文件(VectorSpace.h),其中包括Eigen库,向量类和成员函数:

#include <Eigen/Eigen>
#include <string>

class vector {
public:
  Eigen::Matrix<double,1,Eigen::Dynamic> vec;

double dot(const vector &that){
    return (this->vec).dot(that.vec);
}
};

我试图使用g ++预编译此头文件

g++ -std=c++11 -I../userlib/eigen VectorSpace.h

会生成一个VectorSpace.h.gch,但是当我尝试编译主代码时(基本上是一个空的main()):

g++ -std=c++11 -include VectorSpace.h code.o -o code

我收到以下错误:

../userlib/eigen/Eigen/src/Core/DenseCoeffsBase.h:56:30: warning: ignoring attributes on template argument ‘Eigen::internal::packet_traits<double>::type’ {aka ‘__vector(2) double’} [-Wignored-attributes]
../userlib/eigen/Eigen/src/Core/DenseCoeffsBase.h: In instantiation of ‘class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, -1, true>, Eigen::Block<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, 1, true>, -1, 1, false>, 0>, 0>’:
../userlib/eigen/Eigen/src/Core/DenseBase.h:41:34:   required from ‘class Eigen::DenseBase<Eigen::Product<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, -1, true>, Eigen::Block<Eigen::Block<Eigen::Matrix<double, -1, -1>, -1, 1, true>, -1, 1, false>, 0> >’

我是在做错什么,还是因为无法预先编译本征? (我预编译标准库头没有任何问题,只是在我添加Eigen时收到错误)

1 个答案:

答案 0 :(得分:1)

$ g++ -std=c++11 -I../userlib/eigen VectorSpace.h
$ g++ eigen.cpp -I ../userlib/eigen -include VectorSpace.h -H -o eigen

其中eigen.cpp是包含main()入口点的源文件。

int main()
{
  vector v;
  return 0;
}
相关问题