Haskell GHC Visual Studio DLL странное поведение

Я пытаюсь вызвать C DLL, созданную с помощью Visual Studio (выпуск сообщества 2015) из GHC (версия 7.8.3) для Windows.

Код 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 Platform, затем загрузите и скопируйте последнюю копию binutils в папку mingw платформы haskell. (D: \ Program Files \ Haskell Platform \ 7.10.2-a \ mingw для меня). Затем он начал жаловаться на zlib1.dll, поэтому я также скачал его с MSYS2 и вставил в папку mingw \ bin. После этого все заработало.

2

Решение

Похоже на этот вопрос. В принципе, ghc-7.8 В дистрибутиве содержатся ошибочные binutils, они неправильно обрабатывают .lib файлы Visual Studio Обходной путь должен обновить mingw распространите или восстановите .lib файл. Посмотреть билет (а также # 10726) для деталей.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]