Edit:这个问题不在我的代码中,它已经在许多其他问题上进行了测试,没有问题。这是一个gcc交叉编译问题。
我正在Ubuntu x64上用g++交叉编译一个大型C++程序,以便在Raspberry Pi 2上运行。当使用gcc-4.6.4时,一切似乎都正常。当使用gcc-4.8.5时,异常似乎正在泄漏并导致程序中止。我尝试了一个使用gcc-4.8.5的异常捕获的最小示例,并且最小情况似乎可以正常工作。我的实际程序要复杂得多,异常捕获似乎在某个地方丢失了。
我是否缺少一些g++设置来改进异常处理?
我正在用交叉工具ng 1.22 编译工具链
编辑:这基本上就是代码所做的:
//error_function may be deeper in the stack
void error_function()
{
throw std::runtime_error("This is an error");
}
try
{
error_function();
}
catch (std::exception&)
{
//Not being caught
}
通过设置-O0关闭优化似乎可以解决问题。这个bug似乎是gcc 4.8.5 ARMv6硬浮动构建特有的。