Haskell ghc visual studio DLL 奇怪的行为

Haskell ghc visual studio DLL weird behaviour

我正在尝试从 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.10.2-a\mingw 对我来说)。接下来,它开始抱怨 zlib1.dll,所以我也从 MSYS2 下载并粘贴到 mingw\bin 文件夹中。之后就成功了。

似乎与 this issue. Basically, ghc-7.8 distribution contains buggy binutils, they don't handle Visual Studio .lib files properly. The workaround is to upgrade mingw distribution or regenerate the .lib file. See the ticket (and also #10726) 相似。