有时,出于某种原因,程序没有正确指定或包含所有依赖项,启动时会出现指示缺少依赖项的错误。典型的错误如下:
cannot open shared object libudev.so.0
我看到很多答案建议人们通过在/usr/lib
系统或其他位置创建符号链接来解决此类问题,这似乎确实经常能解决问题。但我看到同样多的评论建议人们这不是一个好主意。以下是一个具有代表性的答案。
在什么情况下可以使用符号链接库来使程序正常运行?从不?有时?如果在运行完程序后删除符号链接会怎样?
这样做的后果是什么?
答案1
创建这些链接的问题在于,它们没有以任何有意义的方式进行管理。如果删除该库,链接就会断开。如果升级该库,它可能会因为没有预期到的链接而遇到错误。
此外,您实际上是在欺骗系统。在链接的示例中,您假装libudev.so.1
实际上是libudev.so.0
。它们的名称不同是有原因的(库的不同版本)。虽然这对某些程序来说可能很好用,但版本之间的差异可能会导致问题(例如段错误或其他意外行为)。
因此,如果您专门创建此链接只是为了运行某个程序,并且您知道稍后会将其删除,那么您解决了第一个问题,但没有解决第二个问题。虽然这确实解决了主要问题,但并不理想。
理想的解决方案当然是安装正确版本的库(链接示例中接受的答案),或者根据您拥有的版本编译程序。