4.1.8. 为什么链接时提示 stack size limit exceeded 警告

一些 SDK 在最后链接阶段,可能会报类似下面的警告:

/opt/pi32v2/bin/pi32v2-ld: warning: LLVM gold plugin: stack size limit exceeded (288) in __os_taskq_del
/opt/pi32v2/bin/pi32v2-ld: warning: LLVM gold plugin: stack size limit exceeded (276) in hci_send_event
/opt/pi32v2/bin/pi32v2-ld: warning: LLVM gold plugin: stack size limit exceeded (280) in vm_data_copy

这个警告的意思是,这些函数的栈空间使用超过了某一个阈值。其中,括号里面的是该函数使用的栈空间大小,最后是这个函数的名字。

例如,下面一行:

/opt/pi32v2/bin/pi32v2-ld: warning: LLVM gold plugin: stack size limit exceeded (288) in __os_taskq_del

的意思是,__os_taskq_del 这个函数使用的栈空间大小是288字节,超过了我们设置的阈值。

这个警告,只是用于提示程序员,哪些函数用了较大的栈,并不代表实际运行的时候,会出现错误。

设置检查阈值的方式:

# 编译参数设置:(以阈值 256 为例)
-Wframe-larger-than=256

# 链接参数设置:(以阈值 256 为例)
--plugin-opt=-warn-stack-size=256

Code::Blocks 工程的设置方法参考: