使用Eigen的插件在第二次运行

时间:2016-07-11 09:07:03

标签: c++ gcc crash eigen gcc4.9

我正在编写一个由程序加载的模块来添加功能,我偶然发现了一个我无法理解的非常奇怪的崩溃。

首先,我使用MSVS2015在Windows中编译完全相同的东西,它可以毫无问题地工作。但是,当我在Unix(Solaris 10)上使用GCC 4.9.3编译它时,会话在第二次运行代码时崩溃,并且我设法将其缩小到或多或少与崩溃完全相同它:复制Eigen :: MatrixXf对象。

使其崩溃的一个非常简单的例子如下:

void entry()
{
    // Initialize matrix1
    Eigen::MatrixXf test(3, 3);

    // Fill it with 3x3 values.
    test << 1, 2, 3, 4, 5, 6, 7, 8, 9;

    // Initialize matrix2
    Eigen::MatrixXf test2(3, 3);

    // Copy
    test2 = test;
}

然而,所有不涉及复制矩阵的东西似乎都运行得很好,当我构建一个非常简单的可执行程序时,我可以很好地复制数组。

我设法缩小了Makefile中的参数范围,但没有区别:

CC_FLAGS = -I$(INC) -fPIC
LINK_FLAGS = -shared

我真的没有想到可能是什么原因,所以我希望有人能指出我正确的方向。我对Unix开发很陌生,不知道调试它的最佳方法是什么,所以也很感激帮助。

值得注意的是,我必须构建自己使用的gcc版本,因为Solaris 10(x86)没有官方二进制文件,但是没有错误,并且它对除此之外的所有内容都非常有效。

谢谢!

1 个答案:

答案 0 :(得分:0)

奇怪的是,使用优化(-O2 / -O3)进行编译解决了这个问题。