使用gcc-4.8.5编译时,C ++异常没有被Raspberry Pi捕获,但与gcc-4.6.4一起使用

时间:2016-04-02 19:13:30

标签: c++ gcc arm raspberry-pi2 crosstool-ng

编辑:这个问题不是我的代码,它已经在许多其他问题上进行了测试而没有问题。这是一个gcc交叉编译问题。

我正在Ubuntu x64上使用g ++交叉编译一个大型C ++程序,以便在Raspberry Pi 2上运行。使用gcc-4.6.4时,一切似乎都有效。当使用gcc-4.8.5时,异常似乎正在泄漏并导致程序中止。我尝试了使用gcc-4.8.5进行异常捕获的最小示例,最小的情况似乎确实正常。我的实际程序要复杂得多,似乎异常捕获在某处丢失了。

我是否缺少一些可以改善异常处理的g ++设置?

我正在使用crosstools-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
}

1 个答案:

答案 0 :(得分:1)

通过设置-O0关闭优化似乎可以解决问题。这个bug似乎特定于gcc 4.8.5 ARMv6硬浮构建。