通过符号链接库克服“无法打开共享库”错误是否可以(可以)?


12

有时,由于某种原因或某种原因,程序没有正确指定或包括所有依赖项,启动该程序会导致错误,表明缺少依赖项。一个典型的错误是这样的:

cannot open shared object libudev.so.0

我看到很多答案,建议人们通过在/usr/lib其他系统位置进行符号链接来解决此类问题,这似乎通常可以解决问题。但是我看到同样数量的评论告诉人们这是一个坏主意。这是一个代表的答案。

在什么情况下以符号链接库使程序正常工作是可以接受的?决不?有时?如果在运行完程序后删除符号链接怎么办?

这样做的后果是什么?

Answers:


12

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

另外,您实质上是在对系统撒谎。在链接的示例中,您假装libudev.so.1libudev.so.0。由于某种原因(库的不同版本),它们的名称不同。尽管这对于某些程序来说可能很好,但是版本之间的差异可能会引起问题(例如段错误或其他意外行为)。

因此,如果您专门创建此链接只是为了使程序运行,并且您知道稍后将其删除,则可以解决第一个问题,而不是第二个问题。尽管这确实解决了主要问题,但这并不理想。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.