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?
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
@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
@ user2407038, das funktioniert nicht. Cabal kann Datei nicht analysieren ... – Leonid