二进制文件需要共享对象的旧版本

二进制文件需要共享对象的旧版本

我得到了一个要执行的二进制文件,但运行ldd ./name_of_binary时却

libABC.so.1 => not found

(我用“libABC”替换了库名,因为我想要一个通用的答案)

我有libABC.so.2。我该如何获取libABC.so.1?或者答案是否针对每个库都是特定的?

答案1

在紧急情况下,您可以尝试创建一个符号链接。

ln -s -T /lib/libABC.so.2 ~/libs/libABC.so.1
export LD_LIBRARY_PATH=~/libs/:$LD_LIBRARY_PATH

这很糟糕,因为 API 可能会有所不同,但它可能会暂时起作用(但它最终会崩溃或出现不可预测的行为,也可能是一个安全问题)。

更好的选择是找到 libABC.so.1 的副本(尝试http://packages.ubuntu.com/)。您可以下载旧软件包,并将其安装到非标准目录中(例如 /opt/ 或 ~/libs/):

dpkg -i --instdir=/opt/ ABC-1.deb

然后将该路径添加到您的 LD_LIBRARY_PATH:

export LD_LIBRARY_PATH="/opt/lib/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH"

有可能只需安装到 root 即可(在这种情况下您可以这样做),但可能会与较新的版本发生冲突。并且可能会导致问题。

sudo dpkg -i ABC-1.deb

相关内容