我试图在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 for me)。接下来,它开始抱怨zlib1.dll,所以我也从MSYS2下载了它并将其粘贴到mingw \ bin文件夹中。之后,它奏效了。