MinGW32:使用-static标志链接ImageMagick



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

为此,我已经用MinGW32/MSys编译了ImageMagick,以便获得兼容的库文件。基本上,链接也可以工作,不过我必须通过configure.bat--lib选项将-llibMagickCore-6.Q16-llibMagickWand-6.Q16显式添加到链接命令中。

然而,即使不存在依赖项,也应该加载用于windows的emacs的二进制分布。当我添加链接器选项(configure.bat --ldflags-static时,我获得了这种行为。

然而,当我尝试使用ImageMagick Support进行编译时,静态链接失败,说它找不到ImageMagick includes。

库文件位于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:BUILDlibrarieslib>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来构建。

我在查看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/libliblibMagickWand-6.Q16.a failed
attempt to open c:mingwbin../../MinGW/usr/local/libliblibMagickWand-6.Q16.a failed
attempt to open c:mingwbin../../MinGW/libliblibMagickWand-6.Q16.a failed
attempt to open c:mingwbin../../MinGW/usr/libliblibMagickWand-6.Q16.a failed
attempt to open D:/BUILD/libraries/liblibMagickWand-6.Q16.lib failed
attempt to open c:mingwbin../../MinGW/usr/local/liblibMagickWand-6.Q16.lib failed
attempt to open c:mingwbin../../MinGW/liblibMagickWand-6.Q16.lib failed
attempt to open c:mingwbin../../MinGW/usr/liblibMagickWand-6.Q16.lib failed
ld: cannot find -llibMagickWand-6.Q16

-lMagickWand-6.Q16代替-llibMagickWand-6.Q16是有效的。

最新更新