Debian 中的 LD_LIBRARY_PATH

Debian 中的 LD_LIBRARY_PATH

我只是遵循了这里的建议:

如何在 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

相关内容