0

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

首先,我使用 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) 没有官方二进制文件,但没有错误,除此之外它对所有内容都非常有效。

谢谢!

4

1 回答 1

0

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

于 2016-07-15T10:12:57.680 回答