- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经编译了 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 文件使用符号链接(symbolic link)的建议似乎并不完全实用,因为每次安装都会覆盖这些符号链接(symbolic link)。(请参阅 edit2 中的最后一张表)。不过,虽然这个系统是这样的,但似乎没有任何其他解决方案。
最佳答案
我想我知道发生了什么,但这更像是一种“预感”而不是答案。
我怀疑有一个额外的 .pc
脚本四处飘荡,您只需要将其删除即可。
找到 ImageMagick.pc
和 ImageMagick++.pc
的位置。这通常在 /usr/share/pkgconfig/
、/usr/local/share/pkgconfig/
、/usr/lib/pkgconfig/
下, /usr/lib64/pkgconfig/
, & etc etc etc.
不要只停留在第一个匹配项上,而是使用 locate
或 find
实用程序扫描所有内容。
find /usr/ -name "ImageMagick*.pc" -type f
您应该有一个类似于...的列表。
/usr/local/share/pkgconfig/ImageMagick++.pc
/usr/local/share/pkgconfig/ImageMagick.pc
/usr/local/share/pkgconfig/ImageMagick++-6.Q16.pc
/usr/local/share/pkgconfig/ImageMagick-6.Q16.pc
/usr/local/share/pkgconfig/ImageMagick++-7.Q16HDRI.pc
/usr/local/share/pkgconfig/ImageMagick-7.Q16HDRI.pc
核对有问题的文件。
# Create a backup place
mkdir -p ~/backups
# Archive `.pc' files for future investigations.
gzip < /usr/local/share/pkgconfig/ImageMagick.pc > ~/backups/ImageMagick.pc.gz
gzip < /usr/local/share/pkgconfig/ImageMagick++.pc > ~/backups/ImageMagick++.pc.gz
# Remove
sudo rm /usr/local/share/pkgconfig/ImageMagick.pc
sudo rm /usr/local/share/pkgconfig/ImageMagick++.pc
# Repeat as nessasry for duplicate instances,
# but KEEP files with version prefixes (i.e `-6.Q16' & `-7.Q16HDRI')
创建符号链接(symbolic link)(假设 ImageMagick-7 是您系统的默认版本)。
sudo ln -s /usr/local/share/pkgconfig/ImageMagick-7.Q16HDRI.pc /usr/local/share/pkgconfig/ImageMagick.pc
sudo ln -s /usr/local/share/pkgconfig/ImageMagick++-7.Q16HDRI.pc /usr/local/share/pkgconfig/ImageMagick++.pc
重建 inkscape,并确认问题已解决。
给 future 的自己写一张便条,描述您所做的事情,以及重复/恢复的步骤。某些程序尚未迁移到 IM-7,因此您很可能需要更新通用 .pc
文件以指向 IM-6(或其他方式)。
关于linux - Inkscape 0.92.2编译: links with two libMagick versions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166467/
我正在尝试运行一个使用 JMagick 的程序。我已将 native 库 libJMagick.so 以及 libMagick.so.10(64 位,与我的系统架构匹配)添加到我的 java.libr
我已经编译了 Inkscape 0.92.2(在 Slackware64-current Linux 上),但无法导出为 PNG。 我发现一些引用资料表明 libpng 可能是罪魁祸首。实际上,我发现
我是一名优秀的程序员,十分优秀!