MinGW32:使用-static标志链接ImageMagick

时间:2013-07-02 19:19:36

标签: linker imagemagick mingw static-libraries building

我目前正在尝试构建支持ImageMagick的Windows版emacs。

为此目的,我已经使用MinGW32 / MSys编译了ImageMagick以获得兼容的库文件。基本上链接也有效,但我必须通过-llibMagickCore-6.Q16的{​​{1}}选项将-llibMagickWand-6.Q16configure.bat明确添加到链接命令中。

但是,即使没有依赖项,也应该加载用于Windows的emacs的二进制分发。我在添加链接器选项(--libconfigure.bat --ldflags时获得的这种行为。

然而,当我尝试使用ImageMagick-Support进行编译时,静态链接失败,说它无法找到ImageMagick包含。

库文件位于-static。作为一个最小的例子:

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 文件是MinGW的静态库,因此缺少.a文件(Visual Studio)应该不是问题。

我使用了ImageMagick的Unix源代码,因为Windows源代码需要Visual Studio来构建。

1 个答案:

答案 0 :(得分:1)

我发现错误正在查看ld -verbose=0 ...

出于某种原因,当使用-static标志时,lookupbehaviour会发生变化。没有-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