首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM的gcc拒绝包含Newlib标准目录。

ARM的gcc拒绝包含Newlib标准目录。
EN

Stack Overflow用户
提问于 2020-07-07 16:34:01
回答 1查看 458关注 0票数 1

我正试图与arm-none-eabi-gcc-9.2.x交叉编译,并出现了以下问题:

代码语言:javascript
复制
undefined symbol 'PRIu64'

(消息被我缩短到必要的最小值),这是由执行以下操作的Newlib头inttypes.h引起的:

代码语言:javascript
复制
#include <stdint.h>

这促使gcc将其星载stdint.h包括在

代码语言:javascript
复制
/usr/lib/gcc/arm-none-eabi/9.2.1/include

而不是Newlib在

代码语言:javascript
复制
/usr/include/newlib

因此,使用上述错误中断编译。当然,我首先尝试在包含路径搜索前加上通常的前缀。

代码语言:javascript
复制
arm-none-eabi-gcc-9.2.1 -I/usr/include/newlib ...

但令我惊讶的是,gcc (通过-xc -E -v)回击了我:

代码语言:javascript
复制
ignoring duplicate directory "/usr/include/newlib"
   as it is a non-system directory that duplicates a system directory

只有一个

代码语言:javascript
复制
arm-none-eabi-gcc-9.2.1 -isystem /usr/include/newlib ...

说服它在搜索中包含Newlib目录。

这是因为装置坏了吗?gcc怎么敢不包括我提供的一条路呢?

ARM用户是否同时携带了他们的gcc,Newlib和一组普通的gcc系统头,或者这种错误配置是从哪里来的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-08 16:35:25

事实上,newlib提供<stdint.h>,而gcc也提供它。因此,当<inttypes.h>包含<stdint.h>时,它不包括来自newlib的<stdint.h>,而是包含来自gcc的<stdint.h>。如果<stdint.h>不定义<inttypes.h>内部使用的宏,那就没什么大不了的了。

最好的方法是修复newlib、更改编译器或修补系统标头。

如果不可能,可以在<sys/types.h>之前包含<inttypes.h><sys/types.h>包括定义必要宏的<_stdint.h>

看来这个问题是由Debian:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=953844提供的“无臂gcc”所特有的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62779900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档