Ubuntu 20.04链接libsystemd遇多版本glibc引用错误,求因及需求确认
链接错误原因与解决方案
为什么会涉及两个不同版本的GLIBC符号?
这是因为你使用的libsystemd.so是在GLIBC版本高于Ubuntu 20.04的系统上编译的——Ubuntu 20.04自带的GLIBC版本是2.31,而pthread_sigmask在GLIBC 2.32中被更新并添加了版本化符号标记,fstatat64则是在GLIBC 2.33中做了同样的操作。GLIBC的函数版本升级并非批量同步进行,不同函数会在不同版本的GLIBC中因实现优化、接口调整等原因单独提升版本,所以编译后的libsystemd.so会同时依赖这两个不同版本的符号。
是否需要同时安装这两个版本的GLIBC?
不需要,而且绝对不建议这么做——Ubuntu 20.04的整个系统依赖是基于GLIBC 2.31构建的,强行安装更高版本的GLIBC会直接破坏系统的依赖链,导致大量系统工具无法正常运行。
你可以通过以下方法解决问题:
- 使用Ubuntu 20.04官方仓库提供的
libsystemd-dev包,这个包是针对系统自带的GLIBC 2.31编译的,不会出现版本不兼容问题。 - 如果你必须使用当前的
libsystemd.so,可以尝试在链接时添加-Wl,--allow-shlib-undefined选项临时绕过检查,但这种方法存在运行时崩溃的风险,仅作临时测试使用。 - 手动在Ubuntu 20.04环境下重新编译libsystemd源码,编译过程中会自动适配系统的GLIBC版本,生成符合当前系统依赖的库文件。
内容的提问来源于stack exchange,提问作者TS_
相关产品推荐
相关产品推荐

