【发布时间】:2018-03-08 06:05:31
【问题描述】:
我已编译 Inkscape 0.92.2(在 Slackware64-current Linux 上),但无法导出为 PNG。
我发现一些参考资料表明 libpng 可能是罪魁祸首。事实上,我发现 inkscape 可执行文件与两个版本的 libpng(1.5 和 1.6)相关联。
大量跟踪和调试表明问题似乎是可执行文件与两个版本的 libMagick(6 和 7)链接,它们导入了不同版本的 libpng。
检查 Inkscape config.log 文件显示确实访问了两个库:
pkg_cv_IMAGEMAGICK_LIBS='-lMagick++-6.Q16 -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI'
编辑:根据 emcconville 的建议,我添加了 --with-magick-plus-plus=yes 并重新编译了所有内容(ImageMagick 和 Inkscape。不过运气不好:
$ ldd /usr/bin/inkscape | grep Magick
libMagick++-6.Q16.so.5 => /usr/lib64/libMagick++-6.Q16.so.5 (0x00007f5ee46f3000)
libMagickWand-6.Q16.so.2 => /usr/lib64/libMagickWand-6.Q16.so.2 (0x00007f5ee43d3000)
libMagickCore-6.Q16.so.2 => /usr/lib64/libMagickCore-6.Q16.so.2 (0x00007f5ee3d23000)
libMagickWand-7.Q16HDRI.so.5 => /usr/lib64/libMagickWand-7.Q16HDRI.so.5 (0x00007f5ee2e9b000)
libMagickCore-7.Q16HDRI.so.5 => /usr/lib64/libMagickCore-7.Q16HDRI.so.5 (0x00007f5ee27a3000)
也许在第 6 版中还有另一个库。虽然我似乎找不到哪个。
Edit2:在应用 emcconville 的步骤之前,我想了解发生了什么......
这些是实际的库及其链接:
libMagick++ so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
libMagick++-6.Q16 a la so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
libMagick++-7.Q16HDRI a la so -> so.4.0.0
so.4 -> so.4.0.0
so.4.0.0
libMagickCore-6.Q16 a la so -> so.2.0.0
so.2 -> so.2.0.0
so.2.0.0
libMagickCore-7.Q16HDRI a la so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
libMagickWand-6.Q16 a la so -> so.2.0.0
so.2 -> so.2.0.0
so.2.0.0
libMagickWand-7.Q16HDRI a la so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
libMagickCore so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
libMagickWand so -> so.5.0.0
so.5 -> so.5.0.0
so.5.0.0
这似乎可以接受,除了(未版本化的)libMagic++、libMagickCore 和 libMagicWand,我怀疑它们是 5.xxx 版并且可以删除。
.PC 文件稍微复杂一点:
---- Version 6 pc files ---------Version 7 pc files ------
ImageMagick-6.Q16.pc ImageMagick-7.Q16HDRI.pc
ImageMagick++-6.Q16.pc
Magick++-6.Q16.pc Magick++-7.Q16HDRI.pc
MagickCore-6.Q16.pc MagickCore-7.Q16HDRI.pc
MagickWand-6.Q16.pc MagickWand-7.Q16HDRI.pc
--- Relationships:
ImageMagick.pc -> ImageMagick-6.Q16.pc
Magick++.pc is same as Magick++-7.Q16HDRI.pc (not a link!)
MagickCore.pc is same as MagickCore-7.Q16HDRI.pc (not a link!)
MagickWand.pc is same as MagickWand-7.Q16HDRI.pc (not a link!)
注意:ImageMagic.pc 指向版本 6, 并且没有生成 ImageMagick++-7.Q16HDRI.pc(即使启用了 ++ 编译选项)
Edit3:今天我再次重新编译了 ImageMagick 的最后一个版本,这次更密切地监控它生成和安装的文件。 @emcconville 建议对 pc 文件使用符号链接似乎并不完全实用,因为每次安装都会覆盖这些符号链接。 (见edit2中的最后一个表)。尽管如此,虽然这个系统是这样的,但似乎没有任何其他解决方案。
【问题讨论】:
-
您是否使用 CPP 库 (
--with-magick-plus-plus=yes) 配置/安装了 ImageMagick-7? -
嗯。不,我没有。在我写的时候编译……完成了。我检查了已安装的库,没有看到任何新文件。我现在正在重新编译inkscope。将报告结果。
-
@emcconville - 似乎不走运。我已经更新了原帖。
-
我怀疑这与一些未删除的
.pc文件有关。pkg-config --libs ImageMagick ImageMagick++的输出是什么?如果同时显示 IM-6 和 IM-7 库,您可能会遇到更大的问题。 -
是的,两者都存在——这怎么可能?是 ImageMagick++ 引入了错误的版本。
$ pkg-config --libs ImageMagick ImageMagick++ -lMagickCore-7.Q16HDRI -lMagick++-6.Q16 -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI
标签: linux compilation imagemagick inkscape