我正在编写一个由程序加载的模块来添加功能,我偶然发现了一个我无法理解的非常奇怪的崩溃。
首先,我使用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)没有官方二进制文件,但是没有错误,并且它对除此之外的所有内容都非常有效。
谢谢!
答案 0 :(得分:0)
奇怪的是,使用优化(-O2 / -O3)进行编译解决了这个问题。