yocto 为 qemu 安装自定义 glibc 版本

问题描述 投票:0回答:1

我有一个 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
1个回答
0
投票

我和 yocto 合作已经快一年了。尽管需要更多信息才能确切知道这是否是问题所在。我的猜测是,您在生成

glibc
作为运行时依赖项的包的配方中缺少配方
a.out
。如果您可以创建二进制文件,那么
a.out
的配方中很可能有类似的内容:

DEPENDS = "glibc"

Yocto 使用交叉编译来制作主机中的所有二进制文件,并且将依赖的运行时包添加到最终映像中,以使映像尽可能小。为了使其在您的映像中工作,您还需要有运行时版本。该消息很明确,您的图像不包含

glibc
包。你只需要添加运行时依赖

RDEPENDS = "glibc"

如果这不起作用,请向我展示

a.out
的配方以及以下命令的输出:

bitbake-layers show-layers

yocto 文档是我使用过的最完整的开源项目之一。

快乐编码。

© www.soinside.com 2019 - 2024. All rights reserved.