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 文件夹中。之后就成功了。
我正在尝试从 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 文件夹中。之后就成功了。