我一直在为我计划的一些即将到来的项目准备一个m68k交叉编译的“环境/工具链”,特别是在macOS (我的原生环境)上使用它时,我遇到了一个问题。
如果我按照自己的指示在Linux (https://github.com/tomstorey/m68k_bare_metal/blob/master/INSTALL-Debian-Ubuntu.md)上安装,那么在我的代码中,我可以通过#include <stdint.h>使用uint8_t等类型。
但是,如果我在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找不到“。
我发现的一个话题是,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等方面的经验还不足以解决这个问题,而且我仍然在学到很多关于设置这一切的知识,所以我想知道是否有人知道我错过了什么。
谢谢
发布于 2020-07-29 19:40:02
当构建了gcc的特定版本时,它显然不是为宿主环境构建的(例如,标准C库的全面可用性,例如newlib)。在这种情况下,您不能期望标准库支持,而只能靠您自己。
你可能想要在新的库支持下重建gcc。
https://stackoverflow.com/questions/62762049
复制相似问题