2016-03-20 13 views
2

Ich schreibe ein Haskell-Paket, das von einer proprietären DLL abhängt. Ich benutze auch stack Werkzeug. Die Bibliothek verfügt über x86- und x64-Versionen. Nach this issue kann ich es nicht tun, indem Sie .cabal Datei ändern. Also versuche ich es zu tun, indem ich Setup.hs aktualisiere. Das ist mein Setup-Skript:Wie verlinke ich ein Paket mit einer proprietären DLL?

import Distribution.Simple 
import Distribution.PackageDescription 
import Distribution.Simple.LocalBuildInfo 
import System.Directory 

updateExtraLibDirs :: LocalBuildInfo -> IO LocalBuildInfo 
updateExtraLibDirs localBuildInfo = do 
    let packageDescription = localPkgDescr localBuildInfo 
     test = head $ testSuites packageDescription 
     testBuild = testBuildInfo test 
    dir <- getCurrentDirectory 
    print $ length $ testSuites packageDescription 
    return localBuildInfo { 
     localPkgDescr = packageDescription { 
      testSuites = [ test { 
       testBuildInfo = testBuild { 
        extraLibDirs = (dir ++ "\\lib") : extraLibDirs testBuild, 
        extraLibs = ("txmlconnector64.dll") : extraLibs testBuild 
       } 
      } ] 
     } 
    } 


main = defaultMainWithHooks simpleUserHooks { 
      confHook = \a f -> confHook simpleUserHooks a f >>= updateExtraLibDirs 
      } 

Dann rufe ich:

> stack test 

Dies führt immer noch zu undefinierten Referenzen während der Test-Suite-Verknüpfung. Warum?

+0

So etwas wie 'ghc-Optionen zu verwenden: -L -llib64 'könnte funktionieren. Da Sie wissen, wie man es von der Kommandozeile aus kompiliert, sagen Sie Cabal, genau das zu tun. Ich denke, das ist höchstens ein Workaround und bestenfalls ein hässlicher Hack. Aber mit Windows und dem FFI spielen die Dinge selten gut, wenn es um die Haskell-Toolchain geht. Wenn der Hack für dich funktioniert, würde ich mich glücklich schätzen. – user2407038

+0

@Leonidas können Sie Ihr Update als Antwort posten und dies akzeptieren, um dieses aus der Warteschlange für unbeantwortete Fragen zu entfernen? Vielen Dank! – sclv

+0

@ user2407038, das funktioniert nicht. Cabal kann Datei nicht analysieren ... – Leonid

Antwort

1

Nur zwei Schritte:

  1. ersetzen "txmlconnector64.dll" mit "txmlconnector64"
  2. In .cabal Datei gesetzt build-type: Custom es zu ermöglichen, Ihre Setup.hs
+0

Froh, dass Sie das herausgefunden haben. Denkst du, dass du auf irgendetwas gestoßen bist, das als Bugreport oder Feature-Request für cabal install in Frage käme? Ich würde gerne ein wenig Follow-up auf Berichterstattung, wenn Sie erklären können, was es sinnvoll sein könnte, hinzuzufügen ... – sclv

+0

@sclv, ein solches Problem existiert bereits. Sie können den Link in dem aktualisierten Beitrag finden. – Leonid