如何 link 带有专有 DLL 的包?
How to link a package with a proprietary DLL?
我正在编写一个 Haskell 包,它依赖于专有 DLL。我也使用 stack
工具。该库有 x86 和 x64 版本。根据 this issue 我不能通过修改 .cabal
文件来做到这一点。所以我试图通过更新 Setup.hs
来做到这一点。这是我的设置脚本:
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
}
然后我打电话给:
> stack test
这仍然会导致在测试套件链接期间出现未定义的引用。为什么?
只需两步:
- 将
"txmlconnector64.dll"
替换为"txmlconnector64"
- 在
.cabal
文件中设置 build-type: Custom
以允许它使用您的 Setup.hs
我正在编写一个 Haskell 包,它依赖于专有 DLL。我也使用 stack
工具。该库有 x86 和 x64 版本。根据 this issue 我不能通过修改 .cabal
文件来做到这一点。所以我试图通过更新 Setup.hs
来做到这一点。这是我的设置脚本:
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
}
然后我打电话给:
> stack test
这仍然会导致在测试套件链接期间出现未定义的引用。为什么?
只需两步:
- 将
"txmlconnector64.dll"
替换为"txmlconnector64"
- 在
.cabal
文件中设置build-type: Custom
以允许它使用您的Setup.hs