ARM 的 gcc 拒绝包含 Newlib 标准目录
gcc for ARM refuses to include Newlib standard directories
我正在尝试 cross-compile 与 arm-none-eabi-gcc-9.2.x
并遇到以下问题:
undefined symbol 'PRIu64'
(消息被我缩短到必要的最小值)这是由 Newlib header inttypes.h
做 a:
引起的
#include <stdint.h>
这促使 gcc 将其板载 stdint.h
来自
/usr/lib/gcc/arm-none-eabi/9.2.1/include
而不是
中的 Newlib
/usr/include/newlib
从而中断编译并出现上述错误。
当然,我首先尝试使用通常的
作为包含路径搜索的前缀
arm-none-eabi-gcc-9.2.1 -I/usr/include/newlib ...
但令我大吃一惊的是,gcc 向我吐了口水(通过 -xc -E -v
):
ignoring duplicate directory "/usr/include/newlib"
as it is a non-system directory that duplicates a system directory
只有一个
arm-none-eabi-gcc-9.2.1 -isystem /usr/include/newlib ...
说服它在搜索中包括 Newlib 目录。
这是因为安装错误吗? gcc 怎么敢不 包含我提供的路径?
ARM 人员是否将他们的 gcc 与 Newlib 和一套香草 gcc 系统 header 一起发布,或者这种错误配置从何而来?
的确,newlib提供了<stdint.h>
,而gcc也提供了。因此,当 <inttypes.h>
包含 <stdint.h>
时,它不包含来自 newlib 的 <stdint.h>
,而是来自 gcc 的 <stdint.h>
。如果 <stdint.h>
不定义 <inttypes.h>
.
内部使用的一些宏,那也没什么大不了的
最好的办法是修复 newlib,更改编译器或修补系统头文件。
如果不可能,您可以在 <inttypes.h>
之前添加 <sys/types.h>
。 <sys/types.h>
包括定义必要宏的 <_stdint.h>
。
看来是 Debian 提供的 arm-none-gcc 特有的问题:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=953844
我正在尝试 cross-compile 与 arm-none-eabi-gcc-9.2.x
并遇到以下问题:
undefined symbol 'PRIu64'
(消息被我缩短到必要的最小值)这是由 Newlib header inttypes.h
做 a:
#include <stdint.h>
这促使 gcc 将其板载 stdint.h
来自
/usr/lib/gcc/arm-none-eabi/9.2.1/include
而不是
中的 Newlib/usr/include/newlib
从而中断编译并出现上述错误。 当然,我首先尝试使用通常的
作为包含路径搜索的前缀arm-none-eabi-gcc-9.2.1 -I/usr/include/newlib ...
但令我大吃一惊的是,gcc 向我吐了口水(通过 -xc -E -v
):
ignoring duplicate directory "/usr/include/newlib"
as it is a non-system directory that duplicates a system directory
只有一个
arm-none-eabi-gcc-9.2.1 -isystem /usr/include/newlib ...
说服它在搜索中包括 Newlib 目录。
这是因为安装错误吗? gcc 怎么敢不 包含我提供的路径?
ARM 人员是否将他们的 gcc 与 Newlib 和一套香草 gcc 系统 header 一起发布,或者这种错误配置从何而来?
的确,newlib提供了<stdint.h>
,而gcc也提供了。因此,当 <inttypes.h>
包含 <stdint.h>
时,它不包含来自 newlib 的 <stdint.h>
,而是来自 gcc 的 <stdint.h>
。如果 <stdint.h>
不定义 <inttypes.h>
.
最好的办法是修复 newlib,更改编译器或修补系统头文件。
如果不可能,您可以在 <inttypes.h>
之前添加 <sys/types.h>
。 <sys/types.h>
包括定义必要宏的 <_stdint.h>
。
看来是 Debian 提供的 arm-none-gcc 特有的问题: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=953844