使用 gcc-4.8.5 编译但适用于 gcc-4.6.4 时,C++ 异常未在 Raspberry Pi 上捕获

标签 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
}

最佳答案

通过设置 -O0 关闭优化似乎可以解决问题。此错误似乎特定于 gcc 4.8.5 ARMv6 硬 float 构建。

关于使用 gcc-4.8.5 编译但适用于 gcc-4.6.4 时,C++ 异常未在 Raspberry Pi 上捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377653/

相关文章:

c++ - 类型转换 char* -> QString,可读性还是清晰度? (C++/Qt)

为参数 `type name' 指定的 C 函数指针错误存储类

macos - 在 OS X 上安装 GCC 4.7.1

assembly - Cortex M0+ ARM 汇编 - 如何实现与位置无关的循环

c - 为什么 ARMv7-A 在从缓存中刷新堆栈指针时会崩溃

c++ - 获取对 std::thread::_M_start_thread 的 undefined reference

c++ - 如何在更改变量后保持指针指向的初始值?

c++ - 单独 header 中的 #ifdef 未按预期工作

linux - 内存使用率超过 100%

c++ - rsa_public_encrypt 返回-1,错误0x0406B07A