我有一个 yocto qemux86-64 qemu 映像,我正在 ubuntu 主机中编译一个 hello world cpp 文件,当我在 qemu 环境中运行此二进制文件时,我收到以下 glibc 错误
root@qemux86-64:~# ./a.out
-sh: ./a.out: No such file or directory
当我检查二进制文件的 ldd 时
root@qemux86-64:~# ldd -v a.out
./a.out: /lib/libc.so.6: version `GLIBC_2.34' not found (required by ./a.out)
linux-vdso.so.1 (0x00007fffa330f000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fdff36a0000)
libc.so.6 => /lib/libc.so.6 (0x00007fdff34d4000)
libm.so.6 => /lib/libm.so.6 (0x00007fdff3391000)
/lib64/ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x00007fdff3883000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fdff3378000)
Version information:
./a.out:
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6
libc.so.6 (GLIBC_2.34) => not found
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
/usr/lib/libstdc++.so.6:
libm.so.6 (GLIBC_2.2.5) => /lib/libm.so.6
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib/ld-linux-x86-64.so.2
libgcc_s.so.1 (GCC_4.2.0) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.4) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.3) => /lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1
libc.so.6 (GLIBC_2.14) => /lib/libc.so.6
libc.so.6 (GLIBC_2.6) => /lib/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
libc.so.6 (GLIBC_2.18) => /lib/libc.so.6
libc.so.6 (GLIBC_2.16) => /lib/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.17) => /lib/libc.so.6
libc.so.6 (GLIBC_2.3.2) => /lib/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib/ld-linux-x86-64.so.2
/lib/libm.so.6:
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib/ld-linux-x86-64.so.2
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6
/lib/libgcc_s.so.1:
libc.so.6 (GLIBC_2.14) => /lib/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
root@qemux86-64:~#
所以我们可以看到有 glibc 版本差异
libc.so.6 (GLIBC_2.34) => not found
libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6
如何在我的 yocto 映像中添加 GLIBC_2.34?
我和 yocto 合作已经快一年了。尽管需要更多信息才能确切知道这是否是问题所在。我的猜测是,您在生成
glibc
作为运行时依赖项的包的配方中缺少配方 a.out
。如果您可以创建二进制文件,那么 a.out
的配方中很可能有类似的内容:
DEPENDS = "glibc"
Yocto 使用交叉编译来制作主机中的所有二进制文件,并且仅将依赖的运行时包添加到最终映像中,以使映像尽可能小。为了使其在您的映像中工作,您还需要有运行时版本。该消息很明确,您的图像不包含
glibc
包。你只需要添加运行时依赖
RDEPENDS = "glibc"
如果这不起作用,请向我展示
a.out
的配方以及以下命令的输出:
bitbake-layers show-layers
yocto 文档是我使用过的最完整的开源项目之一。
快乐编码。