我正在尝试构建一个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
上述错误的一般原因是什么?什么链接器标志可以解决这个错误?
答案 0 :(得分:9)
每当您收到未定义的错误时,您都不会链接满足您的构建选项的内容。你有三个选择,
在这种情况下,Ian Lance Taylor会给出需要-lsupc++
的答案。此外,如果您使用gcc
,则应切换到g++
,这会为您的C ++二进制文件添加适当的库。更多信息是given in the manual。
如果深入嵌入,可以尝试使用该函数编写自己的库。在这种情况下,source to __cxa_end_cleanup()
可用作参考。看起来该函数是在异常条件或exit()
期间恢复寄存器。如果您不使用该功能,您可以存根该功能(风险自负);但代码相当小,甚至在Cortex-M上,我会链接到提供的库。
答案 1 :(得分:1)
将-lc ++添加到链接库列表