2011-09-07 38 views
2

我这里使用Magick ++(ImageMagick的接口)库。(Eclipse的IDE)Magick ++连接错误

#include <Magick++.h> 
#include <string> 
#include <iostream> 

using namespace std; 

using namespace Magick; 

int main(int argc,char **argv) 
{ 
    Image image; 
    image.read("/home/usr1/test.tiff"); 
    image.write("/home/usr1/test.bmp"); 
    return 0; 
} 

我'做与臂-Linux目标横编译一个简单的图像转换器的代码。代码编译成功,但在链接部分,我得到了未定义的引用错误。

/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x144): In function `vm_open': 
ltdl/loaders/dlopen.c:194: undefined reference to `dlopen' 
/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x158):ltdl/loaders/dlopen.c:198: undefined reference to `dlerror' 
/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x16c): In function `vm_close': 
ltdl/loaders/dlopen.c:212: undefined reference to `dlclose' 
/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x17c):ltdl/loaders/dlopen.c:214: undefined reference to `dlerror' 
/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x198): In function `vm_sym': 
ltdl/loaders/dlopen.c:227: undefined reference to `dlsym' 
/usr/local/lib/libMagick++/libMagickCore.a(dlopen.o)(.text+0x1ac):ltdl/loaders/dlopen.c:231: undefined reference to `dlerror' 

我用下面的命令编译代码:

/opt/Mx800SDK/vfitc/cross/bin/arm-linux-g++ -DMx870 -I/opt/Mx800SDK/vfitc/cross/arm-linux/include -I/usr/local/include/ImageMagick -I/opt/Mx800SDK/include -O2 -Wall -c -fmessage-length=0 -fno-strict-aliasing -o'main.o' '../main.cpp' 

和链接:

/opt/Mx800SDK/vfitc/cross/bin/arm-linux-g++ -L/opt/Mx800SDK/lib -L/usr/local/lib/libMagick++ -o'imgConverter' ./main.o -lpthread -lMagick++ -lMagickWand -lMagickCore -ltiff -lz 

是否有任何其他图书馆,我需要它成功地联系起来?我是否正确地链接?提前致谢。

回答

4

尝试反转Magick库,添加MagickWand库(并把libz进行等基础图像库底,并且动态连接库,而你在它):

... -lpthread -lMagick++ -lMagickWand -lMagickCore -lz -ldl 

为见Linker Order - GCC为什么静态库的顺序很重要。

+0

我尝试重新排序库,但我仍然收到未定义的参考错误(从500 +降到100)。 – neztreh

+0

关于什么功能? – Mat

+0

我已经更新了上面的问题,并收到了最新的错误。 – neztreh