未定义的引用__cxa_end_cleanup'

xyb*_*rek 7 c++ arm psoc

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

undefined reference to __cxa_end_cleanup'
Run Code Online (Sandbox Code Playgroud)

使用的工具链是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
Run Code Online (Sandbox Code Playgroud)

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

art*_*ise 9

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

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

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

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

  • 我添加了“ -x c ++”编译器选项,该错误消失了。 (2认同)