【发布时间】:2020-06-10 22:30:33
【问题描述】:
我没有使用标准的gcc 标头。我正在使用-nostdlib 和-nostdinc 选项进行构建。这些选项强制编译器不使用标准头文件。
我正在使用newlib 进行自定义内核开发。 newlib 包含头文件和其他库。
https://stackoverflow.com/a/30792552/13014162
我输入make时的错误:
lib/builtins/lib_int.h:29:12: fatal error: 'stdint.h' file not found
# include <stdint.h>
^
1 error generated.
Makefile:90: recipe for target 'lib/builtins/kern_lib.o' failed
因此,在构建编译器时,应该从newlib(而不是标准头文件)中获取stdint.h。为什么不捡呢?
此项目之前已由其他人构建。所以我的设置中有一些错误。我相信包含路径和其他东西是正确设置的,因为其他人能够构建它。
谁能具体指出我如何使用 newlib。我检查了newlib 里面有stdint.h。
【问题讨论】:
-
因为您使用了
-nostdlib和-nostdinc。只需指定包含目录并链接到 newlib 对象库,就像使用任何其他库一样。 -
@KamilCuk 是的,
-nostdlib不应从标准标题中提取。但是,它应该从newlib获取。我的问题是为什么它不是从newlib -
已经告诉你了:
specify the include directory and link with newlib object library like you would with any other library。也就是说,使用-I和-L告诉工具链newlib 头文件和库的安装位置。 -
您执行什么编译器命令行来获取您显示的错误?它一定是遗漏了关键信息——或者关键信息一定是错误指定的(这无异于同一个问题)。
-
@NeedSomeLuck 标头没有害处。操作系统开发人员通常不使用完全不同的标准库。 stdint.h 是应该使用的头文件之一,而不是自制的
BYTE、WORD、DWORD、U8、u8、U8PTR_t和类似的怪物
标签: c linux linux-kernel clang newlib