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)。

链接地址: http://www.djcxy.com/p/33333.html

上一篇: Haskell ghc visual studio DLL weird behaviour

下一篇: How to set up cabal for ghc 7.10 on windows 64