10

我正在尝试构建一个 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

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

4

2 回答 2

13

每当您遇到未定义的错误时,您都没有链接满足您的构建选项的东西。你有三个选择,

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

在这种情况下,Ian Lance Taylor给出了-lsupc++所需的答案。此外,如果您正在使用,gcc您应该切换到g++,这会为您的 C++ 二进制文件添加适当的库。手册中提供了更多信息。

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

于 2014-07-28T15:56:13.553 回答
1

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

于 2015-08-06T08:40:19.907 回答