我一直在为我计划中的一些即将进行的项目整理各种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
等没有足够的经验,无法真正解决这个问题,而且我仍在学习有关设置所有这些内容的很多知识,所以我我想知道是否有人知道我错过了什么。
谢谢
当您构建了特定版本的gcc时,显然不是针对托管环境构建的(例如,标准C库的完全可用性,例如 newlib ) 。在这种情况下,您将无法期望获得标准库支持,而是靠您自己。
您可能想在 newlib 支持下重新构建gcc。