0

在 Windows(使用 MinGW)上通过 cabal 安装 Haskell GD 包时,我收到以下警告:

Warning: resolving _gdImagePtrDestroyIfNotNull by linking to _gdImagePtrDestroyIfNotNull@4
Warning: resolving _gdImageCopyRotated90 by linking to _gdImageCopyRotated@36
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups

请注意,这些正是 gd-extras 中定义的函数。
然后,当实际编译一个使用 gd 的 Haskell 程序时,我得到以下错误:

Linking Main.exe ...
[...]\cabal\gd-3000.7.3\ghc-7.4.1/libHSgd-3000.7.3.a(Internal.o):fake:(.text+0x2211):undefined reference to 'gdImageCopyRotated90'
[...]\cabal\gd-3000.7.3\ghc-7.4.1/libHSgd-3000.7.3.a(Internal.o):fake:(.text+0x500a):undefined reference to 'gdImagePtrDestroyIfNotNull'
[...]
collect2: ld returned 1 exit status

我无法弄清楚如何解决这个问题——我已经花了很长时间才达到这一点,因为我在试图让它工作时遇到了很多问题,但这似乎是最后的障碍。我已经尝试启用/禁用 stdcall 修复,并更改这些函数在哪个文件中定义(因为 gd-extras 似乎是一个潜在问题),但这并没有解决问题。
谢谢你的帮助。

4

1 回答 1

1

您需要将显式链接器标志传递给 ghc,指向库。Haskell GD 库是自动链接的,但是除非您告诉 ghc,否则 dll 也不会被链接。stdcall-fixup 错误在这里是一个红鲱鱼。

于 2013-02-05T01:19:16.637 回答