对__cxa_end_cleanup'的未定义引用

时间:2014-07-28 01:58:55

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

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

2 个答案:

答案 0 :(得分:9)

每当您收到未定义的错误时,您都不会链接满足您的构建选项的内容。你有三个选择,

  1. 更改构建选项。
  2. 提供图书馆。
  3. 提供替代图书馆。
  4. 避免使用函数调用/数据[此处不可能]。
  5. 在这种情况下,Ian Lance Taylor会给出需要-lsupc++的答案。此外,如果您使用gcc,则应切换到g++,这会为您的C ++二进制文件添加适当的库。更多信息是given in the manual

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

答案 1 :(得分:1)

将-lc ++添加到链接库列表