找不到来自stdint.h的stdint.h include_next

发布时间:2020-07-06 18:15

我一直在为我计划中的一些即将进行的项目整理各种m68k交叉编译“环境/工具链”,特别是在macOS(我的本机环境)上使用它时,我遇到了问题。

如果我按照自己的指示在Linux(https://github.com/tomstorey/m68k_bare_metal/blob/master/INSTALL-Debian-Ubuntu.md)上安装,那么在我的代码中,我可以通过uint8_t使用#include <stdint.h>等类型。

但是,如果我在macOS上安装并尝试执行相同的操作,则会遇到此错误:

In file included from main.c:1:
/Users/tstorey/m68k/m68k-unknown-elf/lib/gcc/m68k-unknown-elf/9.3.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory
    9 | # include_next <stdint.h>
      |                ^~~~~~~~~~
compilation terminated.
make: *** [main.o] Error 1

我已经做了一些搜索,但是我找不到寻找答案的运气很大,也许是因为除了“ stdint.h not found”之外,我真的不知道要搜索什么。

我确实发现一个主题,建议不要真正使用include_next,但是同一个人不会建议修改原始stdint.h文件来解决该问题。大概是因为在那种情况下它包含<stdint.h>,所以此文件应该位于“系统明智”的位置,而gcc应该知道在哪里可以找到它?但是大概该位置不存在。

在我要包含的stdint.h文件所在的目录中,有一个stdint-gcc.h文件,如果我将其包含在代码中,它将很好地编译,不用担心。

原始stdint.h文件似乎确实尝试包含此文件,但前提是未定义__STDC_HOSTED__

$ cat stdint.h
#ifndef _GCC_WRAP_STDINT_H
#if __STDC_HOSTED__
# if defined __cplusplus && __cplusplus >= 201103L
#  undef __STDC_LIMIT_MACROS
#  define __STDC_LIMIT_MACROS
#  undef __STDC_CONSTANT_MACROS
#  define __STDC_CONSTANT_MACROS
# endif
# include_next <stdint.h>
#else
# include "stdint-gcc.h"
#endif
#define _GCC_WRAP_STDINT_H
#endif

很抱歉,如果这篇文章有点太糟糕了,但是我对gcc等没有足够的经验,无法真正解决这个问题,而且我仍在学习有关设置所有这些内容的很多知识,所以我我想知道是否有人知道我错过了什么。

谢谢

回答1

当您构建了特定版本的gcc时,显然不是针对托管环境构建的(例如,标准C库的完全可用性,例如 newlib ) 。在这种情况下,您将无法期望获得标准库支持,而是靠您自己。

您可能想在 newlib 支持下重新构建gcc。

stdint 相关推荐