我想在Windows上調用GHC(版本7.8.3)中使用visual studio(2015社區版)構建的C DLL。Haskell ghc visual studio 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
複製所生成的64位的.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文件夾中。之後,它工作。
謝謝!希望他們在下一個版本中解決這個問題。 – user3042966
方面的問題:它看起來編譯和運行的工作同樣好,只有.dll存在,沒有.lib文件,那麼是否有必要包含.lib? – user3042966
@ user3042966基本上.dll包含鏈接器需要的所有內容。但有些鏈接程序無法從.dll中提取該信息,因此.lib存在。雖然我不知道所有細節。 – Yuras