MinGW32: связывание с ImageMagick с флагом -static

В настоящее время я пытаюсь создать версию emacs для Windows, которая поддерживает ImageMagick.

Для этой цели я уже скомпилировал ImageMagick с MinGW32/MSys, чтобы получить совместимые файлы библиотеки. В основном связывание также работает, хотя я должен явно добавить -llibMagickCore-6.Q16 и -llibMagickWand-6.Q16 в команду связывания через параметр --lib configure.bat.

Однако предполагается, что бинарный дистрибутив emacs для windows загружается даже при отсутствии зависимостей. Такое поведение я получаю, когда добавляю параметр компоновщика (configure.bat --ldflags) -static.

Однако, когда я пытаюсь скомпилировать с помощью ImageMagick-Support, статическое связывание не работает, говоря, что не может найти включения ImageMagick.

Файлы библиотеки находятся в D:/BUILD/libraries/lib. В качестве минимального примера:

D:\>ld -LD:/BUILD/libraries/lib -llibMagickWand-6.Q16

D:\>ld -static -LD:/BUILD/libraries/lib -llibMagickWand-6.Q16
ld: cannot find -llibMagickWand-6.Q16

Однако каталог содержит статическую библиотеку.

D:\BUILD\libraries\lib>dir *Magick*
[...]
2013-07-02  15:16         2,585,830 libMagick++-6.Q16.a
2013-07-02  15:16         1,745,404 libMagick++-6.Q16.dll.a
2013-07-02  15:16             1,178 libMagick++-6.Q16.la
2013-07-02  15:16         5,153,712 libMagickCore-6.Q16.a
2013-07-02  15:16           977,292 libMagickCore-6.Q16.dll.a
2013-07-02  15:16             1,096 libMagickCore-6.Q16.la
2013-07-02  15:16         1,609,692 libMagickWand-6.Q16.a
2013-07-02  15:16           472,364 libMagickWand-6.Q16.dll.a
2013-07-02  15:16             1,142 libMagickWand-6.Q16.la

Есть идеи, что здесь может быть не так? Насколько я понимаю, файлы .a являются статическими библиотеками для MinGW, поэтому отсутствие файлов .lib (Visual Studio) не должно быть проблемой.

Я использовал исходный дистрибутив ImageMagick для Unix, потому что для сборки исходного кода Windows требуется Visual Studio.


person kdb    schedule 02.07.2013    source источник


Ответы (1)


Я нашел ошибку, глядя на ld -verbose=0 ....

По какой-то причине при использовании флага -static поведение поиска меняется. Без флага -static:

...
attempt to open D:/BUILD/libraries/lib/liblibMagickWand-6.Q16.dll.a failed
attempt to open D:/BUILD/libraries/lib/libMagickWand-6.Q16.dll.a succeeded

с флагом -static:

...
attempt to open D:/BUILD/libraries/lib\liblibMagickWand-6.Q16.a failed
attempt to open c:\mingw\bin\../../MinGW/usr/local/lib\liblibMagickWand-6.Q16.a failed
attempt to open c:\mingw\bin\../../MinGW/lib\liblibMagickWand-6.Q16.a failed
attempt to open c:\mingw\bin\../../MinGW/usr/lib\liblibMagickWand-6.Q16.a failed
attempt to open D:/BUILD/libraries/lib\libMagickWand-6.Q16.lib failed
attempt to open c:\mingw\bin\../../MinGW/usr/local/lib\libMagickWand-6.Q16.lib failed
attempt to open c:\mingw\bin\../../MinGW/lib\libMagickWand-6.Q16.lib failed
attempt to open c:\mingw\bin\../../MinGW/usr/lib\libMagickWand-6.Q16.lib failed
ld: cannot find -llibMagickWand-6.Q16

Написание -lMagickWand-6.Q16 вместо -llibMagickWand-6.Q16 сработало.

person kdb    schedule 02.07.2013