1
lcdtyph 2022-05-08 10:02:42 +08:00 via iPhone 2
用 18.04 的镜像引导进入 try ubuntu
然后 mount 你自己的硬盘,把 try ubuntu 环境里的 libc 复制到你硬盘里对应位置就行了 libc 是用户态的,你重装 kernel 有什么用 |
3
hei1000 2022-05-08 11:13:36 +08:00 2
glibc 这种系统基础库最好不要自己安装,前一段时间 Archlinux 没有及时更新 glibc 库版本都被好多人骂(比如 https://www.reddit.com/r/archlinux/comments/scisqp/archs_unmaintained_glibc_is_a_security_risk/),因为这种东西可不是普通的软件包,上游不测试好会有很多问题
|
4
FranzKafka95 2022-05-08 12:02:28 +08:00 via Android
居然想着动 glibc ,吃亏了吧
|
5
aloxaf 2022-05-08 12:12:35 +08:00
教人往根目录下 make install 装软件的教程是蠢
教人往根目录下 make install 升级 glibc 的教程就是坏了 |
6
0xroot OP |
7
Chingim 2022-05-08 16:09:12 +08:00 via iPhone
所以我特别喜欢 go 发行的软件,下了就能用,而不会提示这库那库不满足要求
|
8
findex 2022-05-08 16:18:27 +08:00 1
肯定不能单升级 glic ,glibc 可是牵一发动全身,所有工具链(编译器等)得用同一个 glibc 都编译一遍,然后在用新工具链编译一遍以前的软件。
我以前做 Linux 系统的时候,遇到过这个。这个和 kernel 无关。如果你想回去,可以尝试 chroot 手动安装 ubuntu18.04 原装的 glibc ,然后用官方的源下载官方用特定版本 glibc 给你编译好的各种软件。如果你想尝试特定版本的 glibc ,可以走一下自己做一个 Linux 系统…… |
9
msg7086 2022-05-08 17:08:10 +08:00 2
@0xroot #6 glibc 基本等同于发行版版本了。如果你要用的软件依赖 glibc 的最低版本,那么一般意味着这款软件需要某个特定的 Linux 发行版版本才能运行。你这种情况可以试试添加 Ubuntu 20.04 的源,然后只安装 libc6 关联的包,可以做出一个缝合怪系统来,有一定概率可以正常运行。
我一般是拿 Debian 做 glibc 缝合怪的,很少会出问题。 |
10
0xroot OP |
12
lcdtyph 2022-05-08 18:13:43 +08:00
@seers #11
冷冷知识,golang build 的时候设置 CGO_ENABLED=0 可以运行时也不依赖 glibc |
13
FranzKafka95 2022-05-08 22:58:58 +08:00 via Android
@lcdtyph 冷啥知识,只要有 CGO 就对 glibc 有依赖,再开启 CGO 的情况下又想避免 glibc 版本依赖,还得使用静态链接。
|
14
FranzKafka95 2022-05-08 23:00:01 +08:00 via Android
golang 某些库是必然依赖 cgo ,如 net, os/user 还有 sqlite
|
15
FranzKafka95 2022-05-08 23:01:16 +08:00 via Android
@seers ubantu18.04 的 glibc 版本好像是 2.27 ,某些 golang 库跑不了
|
16
wwqgtxx 2022-05-08 23:57:46 +08:00
@FranzKafka95 net 从 N 个版本开始就不依赖 cgo 了,至于 sqlite 也有 pure go 的版本,哪有什么必然依赖的
|
17
wwqgtxx 2022-05-09 00:02:31 +08:00 1
net 关于 CGO 的文档: https://pkg.go.dev/net#hdr-Name_Resolution
sqlite 的 pure go 版本: https://pkg.go.dev/modernc.org/sqlite |
18
lcdtyph 2022-05-09 00:42:42 +08:00 via iPhone
@FranzKafka95 我当然知道 cgo 与 c runtime 的依赖,我只是在回复那一层说 golang 运行时依赖 libc
|
19
feather12315 2022-05-09 00:48:06 +08:00 via Android
依赖 glibc 的,是因为动态链接 glibc 时指定了 glibc 的版本( objdump -T xxx 可以看到 @glibc-xx )。
为啥这么指定?因为涉及 abi 兼容性。 |