Ubuntu 22.04安装build-essential后为何未包含libm-2.x.so共享库?
Ubuntu 22.04安装build-essential后为何未包含libm-2.x.so共享库?
嘿,这个问题确实有点让人疑惑,我来给你拆解清楚~
首先,这个变化是故意的,根源在于Ubuntu 22.04使用的glibc 2.35版本做了一个重要调整:从glibc 2.34开始,libm(数学库)的共享库实现已经和libc(C标准库)合并了,不再单独提供libm-2.x.so这样的独立共享库文件。
你观察到的现象完全符合这个变更:
- 在Ubuntu 20.04(用glibc 2.31)里,libm还是独立的共享库,所以能找到
libm-2.31.so; - 到了22.04,只有静态库
libm-2.35.a保留着,而共享库的功能已经整合到libc.so.6里了。
接下来回答你几个具体问题:
- 是不是不再支持这个版本?:不是哦,libm的所有数学函数功能都还在,只是不再以单独的共享库形式存在。你平时编译时用
-lm参数链接libm,编译器依然能正确找到对应的代码(因为它知道现在这些功能在libc里),完全不影响使用。 - 能不能通过apt直接安装libm-2.x.so?:不行的,因为Ubuntu 22.04的软件源里已经没有单独提供这个共享库的包了——既然glibc已经把它整合进去,就没必要再单独分发了。
另外,你最后选择用libm.so.6是非常正确的做法!因为libm.so.6是系统的标准符号链接,在22.04里它其实指向的是libc.so.6,完全能满足你对数学库的需求,不需要纠结找不到单独的libm-2.x.so文件。
你可以在Docker里验证一下这个链接关系,比如修改你的Dockerfile的CMD为:
ls -l /usr/lib/x86_64-linux-gnu/libm.so.6
运行后会看到类似这样的输出:
lrwxrwxrwx 1 root root 12 Apr 4 2023 libm.so.6 -> libc.so.6
备注:内容来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

