删除对printf内置函数的引用

时间:2017-07-12 15:47:56

标签: c gcc

我在STM32F4xx项目中遇到了堆栈溢出问题。结果是printf是原因。 FreeRTOS支持建议使用printf-stdarg.c代替。 我删除了我的项目中的所有stdio.h包含。它抱怨“内置函数'printf'的不兼容的隐式声明”,但编译好,这意味着链接器使用了内置库。

我的问题是如何防止链接器(gcc)使用内置的printf / sprintf函数。

1 个答案:

答案 0 :(得分:3)

如果将printf-stdarg.c链接到可执行文件中,则将调用该函数而不是系统定义的printf。标准库中的函数是弱符号,这意味着您可以定义一个将覆盖系统函数的同名函数。

删除#include <stdio.h>并不会阻止系统库的链接。它只是摆脱了代码所需的函数原型。

将包含放回代码中并与printf-stdarg.c链接,您的代码将使用这些功能。