我已经搜索了我的问题并发现了许多页面,但它们都没有完全相同的味道,我不能让我的问题消失。
我有一个程序,它使用Magick ++并在我的电脑上正常工作,但它在我试图运行代码的另一台计算机上失败。一个最小的例子就是:
#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'时他们遇到了同样的错误。但是,当我做的时候
./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 = / home / ...)。我检查了是否存在将我的程序与错误的ImageMagick链接的问题(因为还有一个较旧的系统),但ldd显示一切都很好,即程序与我安装的程序链接,如我所愿,并运行ldd on转换显示它与完全相同的库链接。