stdint.h "no such file or directory" yocto sdk 错误

stdint.h "no such file or directory" error on yocto sdk

我正在用 Yocto/poky(morty 分支)构建一个系统。构建图像和 sdk 工作正常。

我已经在一台机器(除了构建机器)上安装了 SDK 来交叉编译一个工具。

我已经用

加载了环境
source /opt/mydistro/2.2.1/environment-setup-cortexa7hf-neon-vfpv4-poky-linux-gnueabi

使用

构建测试文件
arm-poky-linux-gnueabi-gcc test.cpp

将失败并显示消息

/opt/mydistro/2.2.1/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/6.2.0/include/stdint.h:9:26: fatal error: stdint.h: No such file or directory
# include_next <stdint.h>

使用显式 sysroot 进行编译

arm-poky-linux-gnueabi-gcc test.cpp --sysroot=/opt/mydistro/2.2.1/sysroots/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/

失败

... include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory ...

为什么这不起作用?什么东西少了?

在我的例子中,一种编译解决方案 link 我的示例是使用以下命令:

arm-poky-linux-gnueabi-gcc --sysroot=/opt/mydistro/2.2.1/sysroots/cortexa7hf-neon-vfpv4-poky-linux-gnueabi/ -mfloat-abi=hard

嗯,你不能直接使用交叉编译器是因为sysroot-poising。参见

因此,您应该始终使用 $CC 而不是直接使用交叉编译器。使用 $CC 不仅会指定 sysroot,还会指定 -march=...-mfloat-abi=...-mtune=... 等内容(选项的确切数量取决于您使用的机器)重新构建)。那应该已经解决了你所有的问题。