Haskell ghc visual studio DLL怪异的行为

时间:2015-10-31 17:22:54

标签: c++ haskell visual-studio-2015 ghc ffi

我试图在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文件夹中。之后,它奏效了。

1 个答案:

答案 0 :(得分:2)

似乎与this问题类似。基本上,ghc-7.8发行版包含错误的binutils,它们不能正确处理Visual Studio .lib文件。解决方法是升级mingw分发或重新生成.lib文件。有关详细信息,请参阅故障单(以及#10726)。