Ubuntu 18.04构建Yocto镜像遇GLIBC版本不匹配问题求解决方案
Yocto构建HIPIFY时GLIBC版本不兼容问题解决思路
问题背景
我正在基于Ubuntu 18.04 LTS构建自定义Yocto镜像,已将HIPIFY作为目标端软件包加入,该包依赖LLVM+Clang。在meta-clang层中添加clang到HIPIFY的DEPENDS后,构建时出现GLIBC版本不兼容错误——本地构建机的GLIBC版本为2.27,但clang++及其依赖库要求更高版本的GLIBC(如2.32/2.33/2.34)。
错误信息
/home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libclang-cpp.so.14) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libclang-cpp.so.14) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libclang-cpp.so.14) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libLLVM-14.so) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libLLVM-14.so) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libLLVM-14.so) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libLLVM-14.so) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libstdc++.so.6) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libstdc++.so.6) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/libstdc++.so.6) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/../lib64/libedit.so.0) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/../lib64/libxml2.so.2) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/../lib64/libxml2.so.2) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/../lib64/libxml2.so.2) | /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/clang++: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /home/zmolokwu/Ryzen_Workspace/zube_devel/poky/build/tmp/work/innoflight_cfc510_live_usb-innoflight-linux/hipify/1.0+git999-r0/recipe-sysroot/usr/bin/../lib64/../lib64/libxml2.so.2)
环境信息
本地构建机的ldd输出:
ldd (Ubuntu GLIBC 2.27-3ubuntu1.6) 2.27 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper.
解决方案思路
1. 调整HIPIFY的recipe,使用native版本的clang
问题根源是构建过程中错误调用了目标端的clang++(位于recipe-sysroot下),该clang是针对目标平台编译的,依赖的GLIBC版本高于构建机的2.27。正确做法是使用构建机端的clang(meta-clang提供的native版本)来编译HIPIFY:
- 将HIPIFY recipe中的
DEPENDS += "clang"替换为DEPENDS += "clang-native"; - 若HIPIFY使用CMake构建,在recipe中明确指定编译器路径:
EXTRA_OECMAKE += " \ -DCMAKE_C_COMPILER=${STAGING_BINDIR_NATIVE}/clang \ -DCMAKE_CXX_COMPILER=${STAGING_BINDIR_NATIVE}/clang++ \ "
2. 检查meta-clang层的版本兼容性
确认meta-clang层的分支与当前Yocto发行版(如Dunfell、Kirkstone)匹配。部分新版本的meta-clang构建的目标端clang默认依赖高版本GLIBC,若必须使用目标端clang,可:
- 降级meta-clang到与Yocto发行版兼容的分支;
- 在clang的recipe中添加
--sysroot参数,指定Yocto交叉编译根文件系统,确保目标端clang的编译依赖Yocto内的GLIBC。
3. 不建议强制替换构建机的GLIBC
Yocto构建系统设计中,主机端工具链依赖主机系统的库文件,强行用Yocto中的GLIBC替换本地库会导致构建环境混乱,引发更多兼容性问题,因此不推荐这种方案。
4. 升级构建机系统(备选)
若以上方法无法解决,可将构建机升级到Ubuntu 20.04 LTS(GLIBC 2.31)或更高版本,满足clang对GLIBC的版本要求。但此方案可能引入其他构建环境的兼容性问题,需谨慎评估。
内容的提问来源于stack exchange,提问作者Zube Molokwu
相关产品推荐
相关产品推荐

