Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu:更新libpng_Ubuntu_Libpng - Fatal编程技术网

Ubuntu:更新libpng

Ubuntu:更新libpng,ubuntu,libpng,Ubuntu,Libpng,我需要运行Ubuntu实用程序“convert”,当我运行时,我收到一条错误消息,我的libpng版本已经过时,必须更新。因此,我采用了通常的“apt-get-install”方法,但由于我现在已记不清的原因,这并没有解决问题。这就是事情变得一团糟的地方。我下载了libpng的源代码,进行了make和make安装。我现在在/usr/local/lib中有以下文件: -rw-r--r-- 1 root root 821564 2015-09-11 18:37 /usr/local/lib/libp

我需要运行Ubuntu实用程序“convert”,当我运行时,我收到一条错误消息,我的libpng版本已经过时,必须更新。因此,我采用了通常的“apt-get-install”方法,但由于我现在已记不清的原因,这并没有解决问题。这就是事情变得一团糟的地方。我下载了libpng的源代码,进行了make和make安装。我现在在/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”时,会收到一条错误消息:

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

但我从convert收到相同的错误消息。显然,我现在已经不懂了,如果您能给我一些关于如何继续的提示,我将不胜感激。

您可以通过
LD\u DEBUG
环境变量检查程序从何处加载库。例如,您可以运行:

LD_DEBUG=all convert
LD_DEBUG=libs convert
查看大量调试信息。您可以运行:

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

LD_DEBUG=libs convert 2>&1 | grep -i png
样本输出


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

现在,让我们来看看这个房间里的大象:Ubuntu通过
apt
进行软件包管理有一个原因:这样你就不会破坏依赖关系。如果您确实需要更新版本的库,您应该:

  • 至少通过这种方式,它是一个可以在将来以最小的麻烦恢复/卸载的包
  • 使用“make-install”捕获/打包工具,如。它捕获从源代码构建包的“makeinstall”阶段的输出文件/更改,因此您可以将其视为普通包,而无需查找并手动清除/删除通过直接运行
    makeinstall
    生成的文件。您只能在需要手动处理DEP的系统上执行此操作
未来……

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

LD_LIBRARY_PATH=/home/yourname/tmp convert

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

还有
ldd
命令。@meh这是正确的。我走这条路是因为我想继续使用
LD\u LIBRARY\u PATH
进行未来的测试。我将更新答案以提及这一点。感谢您的洞察力。我现在可以看到convert在哪里寻找库,它的…(笨拙的手指!)显然没有找到它。当我使用apt get install时,我被告知我正在尝试安装的版本已经是最新版本,所以什么也没有发生。无论如何,显然我不适合这个主题,所以我会说“谢谢你的帮助”并说再见。@PeterP当你通过
apt
安装时,它有一个已安装二进制文件、库等的系统目录。当你通过
make install
安装源程序包时,它不会触及目录。您可能已经为您的系统安装了最新的libPNG,但由于您没有使用
apt
dpkg
来移动/删除文件,而没有让系统知道。