c++ - Magick++ 链接错误

标签 c++ linux imagemagick cross-compiling magick++

我这里有一个使用 Magick++(ImageMagick 接口(interface))库的简单图像转换器代码。(Eclipse IDE)

#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;
}

我正在使用 arm-linux 目标进行交叉编译。代码编译成功,但在链接部分,出现 undefined reference 错误。

/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

我还需要其他库才能成功链接吗?我链接对了吗?提前致谢。

最佳答案

尝试反转 Magick 库,添加 MagickWand 库(并将 libz 和其他基本图像库放在最后,以及动态链接器库):

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

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

关于c++ - Magick++ 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330090/

相关文章:

c++ - 在sdl中显示移动对象

c++ - 将任意梯度旋转 90 度的算法

image-processing - 使用ImageMagick(或类似格式)覆盖图像的文件名

php - ImageMagick PHP Docker版本问题

c++ - 堆栈构建程序中的两个问题

c++ - 为C++字符串转义一些字符的函数

c - 识别哪个逻辑核心是超线程的,哪个不是

regex - Linux 中的正则表达式 grep w

linux - 如何在shell脚本文件的每一行末尾添加一个字符

ruby-on-rails - ImageMagick/Paperclip - Paperclip 在大型作业期间失败