gpt4 book ai didi

c++ - GCC arm-none-eabi (Codesourcery) 和 C++ 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:07 26 4
gpt4 key购买 nike

我正在使用 Raisonance 的 Ride7/Codesourcery(又名 Sourcery CodeBench Lite)和一 block STM32F4 板来开发裸机 HMI 平台。

我将在此系统中使用 C++ 异常,但我抛出的任何异常都以写入 stderr 的“递归调用终止”错误结束。

重现问题的代码:(main.cpp)

int main(void)
{
try {
throw 1;
}
catch (...) {
printf("caught");
}
}

我已经尝试过 Raisonance 和其他资源来寻求解决方案,但没有收到任何可操作的帮助。

潜在问题/解决方案 1:

我在其他论坛上问过,他们提到我需要在我的启动程序集文件中调用静态构造来初始化展开表(至少我认为他们是这么说的),但我不知道该怎么做这个。

潜在问题/解决方案2

我还在 binutils/gas 中发现了一个错误,这可能是我在这里遇到问题的根源 (http://sourceware.org/bugzilla/show_bug.cgi?id=13449)。我一直在尝试使用此补丁构建我自己的工具链版本,但它正在变成一个独立的项目,但尚未成功。

问题

我是否需要在代码中做一些事情才能使用 C++ 异常,或者这可能是工具链中的错误?如果是前者,请详细说明。

最佳答案

经过一些不必要的劝说,Raisonance 终于修改了他们的默认链接描述文件,解决了这个问题。我发布整个链接描述文件可能不合法,但这是人们需要知道的知识

将其添加到 .text 部分

*(.eh_frame)

添加这些部分(根据您在链接描述文件中设置的内存块命名YourMemory。我的是Flash)

.ARM.extab :
{
*(.ARM.extab* .gnu.linkonce.armextab.*)
} >YourMemory

.ARM :
{
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >YourMemory

确保这一行出现在 bss 部分

*(.bss*)

在这个任务中,我遇到了以下有用的资源

关于c++ - GCC arm-none-eabi (Codesourcery) 和 C++ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com