1

我一直在为我计划的一些即将到来的项目组合一个 m68k 交叉编译“环境/工具链”,特别是在 macOS(我的原生环境)上使用它时遇到了问题。

如果我按照自己的说明在 Linux 上安装(https://github.com/tomstorey/m68k_bare_metal/blob/master/INSTALL-Debian-Ubuntu.md),那么在我的代码中我可以使用诸如uint8_tetc 通过#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等方面的经验还不够,无法真正解决这个问题,而且我仍在学习很多关于设置所有这些的知识,所以我想知道是否有人知道我错过了。

谢谢

4

1 回答 1

0

当您构建了特定版本的 gcc 时,它显然不是为托管环境构建的(即标准 C 库的完全可用性,例如newlib)。在这种情况下,您不能期望标准库支持并且只能靠自己。

你可能想用newlib支持重新构建 gcc 。

于 2020-07-29T19:40:02.443 回答