我用谷歌搜索了我的问题并找到了很多页面,但没有一个具有完全相同的风格,我无法解决我的问题。
我有一个使用 Magick++ 的程序,在我的 PC 上运行良好,但在我尝试运行代码的另一台计算机上失败。一个最小的例子是这样的:
#include <iostream>
#include <Magick++.h>
int main(){
Magick::Image im;
im.read( "/fullpathtoimage.jpg" );
std::cout<< im.columns() <<"\n";
return 0;
}
(当然“/fullpathtoimage.jpg”是一个有效的图像)。
这引发了一个异常:
terminate called after throwing an instance of 'Magick::ErrorMissingDelegate'
what(): ImageMagick: NoDecodeDelegateForThisImageFormat `/fullpathtoimage.jpg' @ constitute.c/ReadImage/503
Aborted
关于这个问题的其他报告基本上说他们没有 jpeg 的委托,应该安装 libjpeg 等,但是在运行“转换”时他们遇到了同样的错误。但是,当我这样做时
./convert /fullpathtoimage.jpg temp.png
它运行完美。正在做
./identify -list configure
名单,除其他外
DELEGATES bzlib mpeg fontconfig freetype jng jpeg pango png ps x xml zlib
LIBS -lfreetype -ljpeg -lpng12 -lfontconfig -lXext -lXt -lSM -lICE -lX11 -lbz2 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lxml2 -lz -lm
和
./identify -list format | grep JPEG
给
JNG* rw- JPEG Network Graphics
JPEG* rw- Joint Photographic Experts Group JFIF format (62)
PJPEG* rw- Joint Photographic Experts Group JFIF format (62)
所以,一切似乎都很好,所有二进制文件都可以工作,只是我的代码不行。
我安装的版本是 ImageMagick-6.8.7-8,我从源代码构建它,因为我在机器上没有 root 访问权限,我将它安装到我家中的某个位置(使用 ./configure --prefix=/家/... )。我检查了将我的程序与错误的 ImageMagick 链接是否存在问题(因为也有一个较旧的系统),但 ldd 显示一切都很好,即程序与我安装的程序链接,如我所愿,并运行 ldd on convert 显示它与完全相同的库链接。