c++ - 对 __cxa_end_cleanup' 的 undefined reference

标签 c++ arm psoc

我正在尝试构建一个 C++ 项目,但是当它完成时抛出此错误:

undefined reference to __cxa_end_cleanup'

使用的工具链是 ARM GCC 4.7.3,链接器自定义标志是:

-mthumb -march=armv6-m -T .\Generated_Source\PSoC4\cm0gcc.ld -g -Wl,-Map,${OutputDir}\${ProjectShortName}.map -specs=nano.specs -Wl,--gc-sections

上述错误的一般原因是什么?哪些链接器标志可以解决此错误?

最佳答案

无论何时遇到未定义的错误,都说明您没有链接满足您的构建选项的内容。你有四个选择,

  1. 更改构建选项。
  2. 提供图书馆。
  3. 提供替代库。
  4. 避免函数调用/数据使用[此处不可能]

在这种情况下,Ian Lance Taylor给出了需要 -lsupc++ 的答案。此外,如果您使用的是 gcc,则应切换到 g++,它会为您的 C++ 二进制文件添加适当的库。更多信息是 given in the manual .

如果你嵌入很深,你可以尝试用函数编写你自己的库。 source to __cxa_end_cleanup()在这种情况下可供引用。看起来该函数是在异常情况或 exit() 期间恢复寄存器。如果您不使用该功能,则可以 stub 该功能(风险自负);但代码相当小,即使在 Cortex-M 上,我也会链接到提供的库。

关于c++ - 对 __cxa_end_cleanup' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987539/

相关文章:

c++ - 在一行中初始化一对 vector

c++ - Qt中连接不同类的信号槽

c++ - Libusb - ubuntu - Psoc5。 libusb_open_device_with_vid_pid 返回 0

c - 为什么两个 .C 文件中的同名私有(private)函数会导致多重定义错误?

c++ - makefile 编译所有文件而不是最后编辑的文件

c++ - 从外部静态库访问函数

arrays - strb w1, [x22,x23] 当x23达到一定值时导致的段错误

c - ARM 汇编内联 C 互斥实现

assembly - 将 ARM 程序集转换为 gnu 程序集

android - 当我将函数调用移动到不同的按钮时,为什么我的 ble 应用程序会崩溃?