Eigen segfault没有优化Solaris

时间:2014-11-19 16:40:35

标签: c++ c++11 segmentation-fault eigen eigen3

我有以下代码:

#include <Eigen/Dense>

struct States 
{
    // Eigen::VectorXd v;
    Eigen::VectorXd v{Eigen::VectorXd::Ones(2)};

    States() {
        // v.resize(2);
        // v << 1, 1;
    }
};

States st;

int main() {}

每当我在Solaris 11(使用g ++ 4.9)下构建项目时,没有优化,我在运行时会遇到段错误(核心转储)。在进行了一些挖掘和逐步调试之后,我认为错误的一行是在 DenseCoeffBase.h,在函数copyPacket内,即第537行

derived().template writePacket<StoreMode>(index, 
  other.derived().template packet<LoadMode>(index));

我用来编译/运行的命令行:g++ -std=c++11 -I ./eigen_3.2.2 example.cpp; ./a.out

一些评论:

  • 如果我在States st;内移动声明main(),它就可以了,不会发生段错误。
  • 如果我在v取消注释States的声明并注释C ++ 11样式的初始化,那么在构造函数中使用v.resize(2); v << 1, 1;,它可以正常工作
  • 如果我使用-O2-O3优化,则可行。
  • 在我测试的所有其他平台上(Ubuntu 14.04,Debian7,OS X 10.10),无论优化级别如何,它都可以使用
  • 问题似乎只出现在Solaris上,没有优化,在g ++ 4.9

我的问题如下:

  1. 我写的代码是否正确?也就是说,我可以安全地使用C++11样式的类内初始化,还是应该声明向量然后在构造函数中调整它?

  2. 如果我的代码是正确的,有没有人遇到过这个问题? (我知道这种可能性非常小,但我仍然会问:))

  3. PS:我使用Eigen 3.2.2(虽然问题也出现在3.2.1上)

    如果有人能告诉我是否可以在Solaris11上构建/运行程序(无论编译器),我将不胜感激

0 个答案:

没有答案