我正在编写一个由程序加载以添加功能的模块,我偶然发现了一个我无法理解的非常奇怪的崩溃。
首先,我使用 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) 没有官方二进制文件,但没有错误,除此之外它对所有内容都非常有效。
谢谢!