Ubuntu:更新libpng

时间:2015-09-12 13:08:16

标签: ubuntu libpng

我需要运行Ubuntu实用程序“convert”,当我这样做时,我收到一条错误消息,说我的libpng版本已经过时并且必须更新。所以,我采用了“apt-get install”的常用路线,但由于我现在不再记得的原因,这并没有解决问题。这是事情变得混乱的地方。我下载了libpng的源代码,做了make和make install。我现在在/ usr / local / lib中有以下文件:

-rw-r--r-- 1 root root 821564 2015-09-11 18:37 /usr/local/lib/libpng16.a
-rwxr-xr-x 1 root root    937 2015-09-11 18:37 /usr/local/lib/libpng16.la
lrwxrwxrwx 1 root root     19 2015-09-11 18:37 /usr/local/lib/libpng16.so -> libpng16.so.16.18.0
lrwxrwxrwx 1 root root     19 2015-09-11 18:37 /usr/local/lib/libpng16.so.16 -> libpng16.so.16.18.0
-rwxr-xr-x 1 root root 602132 2015-09-11 18:37 /usr/local/lib/libpng16.so.16.18.0
lrwxrwxrwx 1 root root     10 2015-09-11 18:37 /usr/local/lib/libpng.a -> libpng16.a
lrwxrwxrwx 1 root root     11 2015-09-11 18:37 /usr/local/lib/libpng.la -> libpng16.la
lrwxrwxrwx 1 root root     11 2015-09-11 18:37 /usr/local/lib/libpng.so -> libpng16.so

......这对我来说很合理。但是,现在当我运行“转换”时,我收到一条错误消息:

convert: error while loading shared libraries: libpng.so.2: cannot open shared object file: No such file or directory

在绝望中我创建了以下链接:

lrwxrwxrwx 1 root root     34 2015-09-11 18:39 /usr/local/lib/libpng.so.2 -> /usr/local/lib/libpng16.so.16.18.0

但是我从转换中得到了相同的错误消息。显然,我现在已经超出了我的深度,并且会欣赏有关如何继续的任何提示。

1 个答案:

答案 0 :(得分:1)

您可以通过LD_DEBUG环境变量检查程序从哪里加载库。例如,您可以运行:

LD_DEBUG=all convert

查看大量调试信息。你可以运行:

LD_DEBUG=libs convert

要查看动态加载的所有库convert的列表。在您的情况下,您可以通过运行来更具体:

LD_DEBUG=libs convert 2>&1 | grep -i png

示例输出

     20939: find library=libpng12.so.0 [0]; searching
     20939:   trying file=/lib/i386-linux-gnu/libpng12.so.0
     20939: calling init: /lib/i386-linux-gnu/libpng12.so.0
  -quality value       JPEG/MIFF/PNG compression level
     20939: calling fini: /lib/i386-linux-gnu/libpng12.so.0 [0]

您还可以使用ldd命令,即ldd convert来获得类似的结果,如@meuh 所示。

现在,要在房间里召唤大象:Ubuntu通过apt进行包裹管理是有原因的:所以你不要破坏你的依赖关系。如果您真的需要更新版本的库,您应该:

  • Pull the prebuilt package from LaunchPad.net.至少在这种情况下,它是一个可以在将来以最小的麻烦恢复/卸载的软件包。
  • 使用" make install"捕获/打包工具,如checkinstall。它从" make install"捕获输出文件/更改。从源代码构建包的阶段,因此您可以将其视为普通包,而不是必须寻找并手动清除/删除直接运行make install生成的文件。您应该只在需要手动处理deps的系统上执行此操作like good ol' Slackware. :)

将来......

您可以直接通过make构建它,将库/二进制文件复制到临时文件夹(即:/home/yourname/tmp),然后通过以下方式运行convert,而不是直接安装libpng。 / p>

LD_LIBRARY_PATH=/home/yourname/tmp convert

这将导致提供的路径成为您解析共享对象时启动的程序搜索的第一个位置。它会在那里找到您libpng的本地版本,而不是其他内容。无需管理整个系统即可测试单个库的完美方法。