c++ - 使用 Eigen 的插件在第二次运行时崩溃

标签 c++ gcc crash eigen gcc4.9

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

首先,我使用 MSVS2015 在 Windows 中编译了完全相同的东西,它可以正常工作。但是,当我在 Unix(Solaris 10)上使用 GCC 4.9.3 编译它时, session 在第二次运行代码时崩溃,我已经设法将其范围缩小到或多或少确切地导致它崩溃的原因:复制 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) 没有官方二进制文件,但没有错误,除此之外它对所有内容都非常有效。

谢谢!

最佳答案

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

关于c++ - 使用 Eigen 的插件在第二次运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303071/

相关文章:

c++ - RValue 引用行为

c - GCC 报告包含的无关错误

C: 在 Linux 上可靠地导致 `double free or corruption`

ios4 - 应用程序在特定行崩溃,为什么?

c++ - C++中的二进制文件

c++ - 其中一个参数需要专门化而另一个不需要的模板函数

c++ - 为什么 CMake 从 INCLUDE_DIRECTORIES() 调用中删除一些包含目录?

gcc - GCC 的通行证和调用的程序是什么?

excel - Excel VBA倒数计时器-代码崩溃的Excel

iOS 应用程序崩溃并出现符号未找到错误