我只是遵循了这里的建议:
如何在 CentOS 6.5 中将 glibc 更新到 2.14
作为一个Android相关程序一直在抱怨glibc-2.29
一切似乎都已编译,现在在/opt
文件夹中您可以看到新安装的库的文件夹:
$ ls /opt/glibc-2.29/
bin etc include lib libexec sbin share var
然而,即使重新启动后,原始程序仍然会产生错误消息:
.....because /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found
我认为解决方案的最后一行:
export LD_LIBRARY_PATH="/opt/glibc-2.14/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
可能可以在 Centos 6 中运行,但不能在 Debian 中运行。如果我env | grep LD
在重新启动后键入,它不会找到任何内容。我刚刚检查了我的历史记录,并在运行之前将 2.14 更改为 2.29。
我正在运行 Debian 10.4 Buster。有什么想法可以让这项工作或故障找到它吗?
更新:
我发现在需要它的程序之前运行最后一行以在同一终端窗口内导出 LD_LIBRARY_PATH 可以使错误消失,但它确实会杀死该终端中的所有内容 - 无论我输入什么,甚至ls
都会返回内存访问错误。我什么也做不了,只能关闭那个终端。看来Debian确实不喜欢LD路径被这样改变。
答案1
你不能盲目地改变glibc并期望一切都能愉快地应对。期望 2.14 的程序将需要继续使用 2.14,但期望 2.29 的程序可以设置为使用它。
如果您设置,LD_LIBRARY_PATH
您将告诉链接器在哪里可以找到库。如果您将 2.29 与 2.14 相同,那么链接器将尝试将旧程序与新库链接,从而带来您所发现的令人不满意的后果。
幸运的是,您可以LD_LIBRARY_PATH
仅设置必要的可执行文件,然后它不会影响其他任何内容:
LD_LIBRARY_PATH=/opt/glibc-2.29/lib /path/to/my/program