Ошибка связывания Magick++

У меня есть простой код конвертера изображений с использованием библиотеки 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

Есть ли какая-либо другая библиотека, которая мне нужна, чтобы связать ее успешно? Я правильно связываю? Заранее спасибо.


person neztreh    schedule 07.09.2011    source источник


Ответы (1)


Попробуйте инвертировать библиотеки Magick, добавьте библиотеку MagickWand (и поместите libz и другие библиотеки базовых изображений в конец, а также библиотеку динамического компоновщика):

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

См. Порядок компоновщика — GCC, чтобы узнать, почему важен порядок статических библиотек.

person Mat    schedule 07.09.2011
comment
Я попытался изменить порядок библиотек, но все еще получаю неопределенные ошибки ссылок (от 500+ до 100). - person neztreh; 07.09.2011
comment
я обновил вопрос выше с последними ошибками, которые я получил. - person neztreh; 07.09.2011
comment
попытался добавить -lMagickWand, и теперь неопределенная ссылка уменьшилась до 9. проверьте обновление. - person neztreh; 07.09.2011
comment
Эх, ты тоже должен провести небольшое исследование... dlopen и друзья, как ни странно, в -ldl. - person Mat; 07.09.2011
comment
да, я погуглил и нашел решение. Большое спасибо за Вашу помощь. - person neztreh; 07.09.2011