我需要运行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
但是我从转换中得到了相同的错误消息。显然,我现在已经超出了我的深度,并且会欣赏有关如何继续的任何提示。
答案 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
进行包裹管理是有原因的:所以你不要破坏你的依赖关系。如果您真的需要更新版本的库,您应该:
make install
生成的文件。您应该只在需要手动处理deps的系统上执行此操作like good ol' Slackware. :) 将来......
您可以直接通过make
构建它,将库/二进制文件复制到临时文件夹(即:/home/yourname/tmp
),然后通过以下方式运行convert
,而不是直接安装libpng。 / p>
LD_LIBRARY_PATH=/home/yourname/tmp convert
这将导致提供的路径成为您解析共享对象时启动的程序搜索的第一个位置。它会在那里找到您libpng
的本地版本,而不是其他内容。无需管理整个系统即可测试单个库的完美方法。