通过符号链接库来克服“无法打开共享对象”错误可以吗?

通过符号链接库来克服“无法打开共享对象”错误可以吗?

有时,出于某种原因,程序没有正确指定或包含所有依赖项,启动时会出现指示缺少依赖项的错误。典型的错误如下:

cannot open shared object libudev.so.0

我看到很多答案建议人们通过在/usr/lib系统或其他位置创建符号链接来解决此类问题,这似乎确实经常能解决问题。但我看到同样多的评论建议人们这不是一个好主意。以下是一个具有代表性的答案。

在什么情况下可以使用符号链接库来使程序正常运行?从不?有时?如果在运行完程序后删除符号链接会怎样?

这样做的后果是什么?

答案1

创建这些链接的问题在于,它们没有以任何有意义的方式进行管理。如果删除该库,链接就会断开。如果升级该库,它可能会因为没有预期到的链接而遇到错误。

此外,您实际上是在欺骗系统。在链接的示例中,您假装libudev.so.1实际上是libudev.so.0。它们的名称不同是有原因的(库的不同版本)。虽然这对某些程序来说可能很好用,但版本之间的差异可能会导致问题(例如段错误或其他意外行为)。

因此,如果您专门创建此链接只是为了运行某个程序,并且您知道稍后会将其删除,那么您解决了第一个问题,但没有解决第二个问题。虽然这确实解决了主要问题,但并不理想。

理想的解决方案当然是安装正确版本的库(链接示例中接受的答案),或者根据您拥有的版本编译程序。

相关内容