Haskell ghc visual studio DLL奇怪的行为
我试图在Windows上调用GHC(版本7.8.3)中的Visual Studio(2015社区版)构建的C DLL。
C代码:(myDLL.cpp)
extern "C" {
__declspec(dllexport) int someFn() {
return 42;
}
}
Haskell代码:( Main.hs)
module Main where
import Foreign.Ptr
import Foreign.C.Types
import Data.Int
foreign import ccall unsafe "someFn" c_someFn :: CInt
mySomeFn = c_someFn
main :: IO ()
main = do let z = mySomeFn
print z
将生成的x64 .dll和.lib和.hs文件复制到相同的文件夹并运行后
ghci -L. -lmyDLL Main.hs
...
>main
按预期打印“42”。
运行
ghc -L. -lmyDLL Main.hs
编译和链接正常,但在执行main.exe之后,没有输出被打印。 甚至没有错误消息。 为什么会发生?
编辑:这是我所做的修复它。 安装最新的Haskell平台,然后将最新的binutils副本下载并复制到haskell平台的mingw文件夹中。 (D: Program Files Haskell Platform 7.10.2-a mingw对我来说)。 接下来,它开始抱怨zlib1.dll,所以我也从MSYS2下载并粘贴到mingw bin文件夹中。 之后,它工作。
似乎与此问题类似。 基本上, ghc-7.8
发行版包含有问题的binutils,它们不能正确处理Visual Studio .lib文件。 解决方法是升级mingw
分发或重新生成.lib文件。 详情请见票证(#10726)。