我只是按照这里的建议:
如何在 CentOS 6.5 中将 glibc 更新到 2.14
作为Android相关程序一直在抱怨glibc-2.29
一切似乎都可以编译,现在在/opt文件夹中,您可以看到新安装的库的文件夹:
$ ls /opt/glibc-2.29/
bin etc include lib libexec sbin share var
Run Code Online (Sandbox Code Playgroud)
然而,即使在重新启动后,原始程序仍会产生其错误消息:
.....because /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found
Run Code Online (Sandbox Code Playgroud)
我在想解决方案的最后一行:
export LD_LIBRARY_PATH="/opt/glibc-2.14/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
Run Code Online (Sandbox Code Playgroud)
可能适用于 Centos 6 但不适用于 Debian。如果我env | grep LD在重新启动后输入它不会找到任何东西。我刚刚检查了我的历史记录,并在运行之前将 2.14 更改为 2.29。
我正在运行 Debian 10.4 Buster。任何想法如何使这项工作或故障找到它?
更新:
我发现在需要它的程序之前运行最后一行以在同一终端窗口中导出 LD_LIBRARY_PATH 会使错误消失,但它确实会杀死该终端中的所有内容 - 无论我输入什么,甚至ls返回内存访问错误。我只能关闭那个终端。看来Debian真的不喜欢那样修改LD路径。
你不能盲目地改变 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |