【问题标题】:removing reference to printf built-in function删除对 printf 内置函数的引用
【发布时间】:2017-12-17 03:46:38
【问题描述】:

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

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

【问题讨论】:

  • 这个错误如何意味着它使用了内置库?
  • 我在eclipse下使用SW4STM32。
  • 它只使用标准的一个,因为你没有提供替代品
  • 你可以包含任何你想要定义int printf(const char *format, ...)的标题。
  • @Scott Hunter:这不是错误。这只是一个警告。

标签: c gcc


【解决方案1】:

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

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

将包含返回到您的代码中并与 printf-stdarg.c 链接,您的代码将使用这些函数。

【讨论】:

  • 谢谢。我会测试它。忍受我。
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2021-06-13
  • 1970-01-01
相关资源
最近更新 更多