我正在尝试构建一个 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
上述错误的一般原因是什么?哪些链接器标志可以解决此错误?
最佳答案
无论何时遇到未定义的错误,都说明您没有链接满足您的构建选项的内容。你有四个选择,
- 更改构建选项。
- 提供图书馆。
- 提供替代库。
- 避免函数调用/数据使用
[此处不可能]。
在这种情况下,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/