J'écris un paquet Haskell qui dépend d'une DLL propriétaire. J'utilise aussi l'outil stack
. La bibliothèque a des versions x86 et x64. Selon this issue je ne peux pas le faire en modifiant le fichier .cabal
. Donc, je suis en train de le faire en mettant à jour Setup.hs
. Ceci est mon script d'installation:Comment lier un paquet avec une DLL propriétaire?
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
}
Alors je l'appelle:
> stack test
Cela conduit encore à des références non définies au cours de la liaison suite de tests. Pourquoi?
Quelque chose comme 'GHC-options: -L -llib64 'pourrait fonctionner. Puisque vous savez comment le compiler à partir de la ligne de commande ... dites simplement à cabal de faire exactement cela. Je suppose que c'est tout au plus une solution de contournement et au mieux un hack laid. Mais les choses fonctionnent rarement bien avec Windows et le FFI quand il s'agit de la chaîne d'outils Haskell. Si le hack fonctionne pour vous, je me compterais chanceux. –
user2407038
@Leonidas pouvez-vous poster votre mise à jour en tant que réponse et l'accepter pour l'enlever de la file d'attente de questions sans réponse? Merci! – sclv
@ user2407038, cela ne fonctionne pas. La cabale ne peut pas analyser le fichier ... – Leonid