Magick++ 链接错误

Posted

技术标签:

【中文标题】Magick++ 链接错误【英文标题】:Magick++ linking error 【发布时间】:2011-09-07 07:09:05 【问题描述】:

我这里有一个使用 Magick++(ImageMagick 接口)库的简单图像转换器代码。(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 目标进行交叉编译。代码编译成功,但在链接部分,我得到了未定义的引用错误。

/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

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

【问题讨论】:

【参考方案1】:

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

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

请参阅Linker Order - GCC 了解为什么静态库的顺序很重要。

【讨论】:

我尝试重新排序库,但我仍然收到未定义的引用错误(从 500+ 到 100)。 我已经用我得到的最新错误更新了上面的问题。 尝试添加 -lMagickWand,现在未定义的引用已降至 9。请检查更新。 呃,你自己也应该做一些研究...dlopen 和朋友们,令人惊讶的是,在-ldl 是的,我用谷歌搜索并找到了解决方案。非常感谢您的帮助。

以上是关于Magick++ 链接错误的主要内容,如果未能解决你的问题,请参考以下文章

闪亮的 Flexdashboard 中的 image_composite (Magick) 返回错误

Image Magick Module 抛出奇怪的错误(Express js Node js)

core-rl-magick-.dll 这是一个啥插件?如果丢失改怎么办呢?

使用R magick包时出错

无法循环文件,文件名,windows批处理文件和图像magick中的空格

rmagick gem安装“找不到Magick-config”