我在STM32F4xx项目中遇到了堆栈溢出问题。结果是printf是原因。 FreeRTOS支持建议使用printf-stdarg.c代替。 我删除了我的项目中的所有stdio.h包含。它抱怨“内置函数'printf'的不兼容的隐式声明”,但编译好,这意味着链接器使用了内置库。
我的问题是如何防止链接器(gcc)使用内置的printf / sprintf函数。
答案 0 :(得分:3)
如果将printf-stdarg.c链接到可执行文件中,则将调用该函数而不是系统定义的printf
。标准库中的函数是弱符号,这意味着您可以定义一个将覆盖系统函数的同名函数。
删除#include <stdio.h>
并不会阻止系统库的链接。它只是摆脱了代码所需的函数原型。
将包含放回代码中并与printf-stdarg.c链接,您的代码将使用这些功能。