Haskell 如何将包与专有DLL链接?

Haskell 如何将包与专有DLL链接?,haskell,dll,ghc,cabal,haskell-stack,Haskell,Dll,Ghc,Cabal,Haskell Stack,我正在编写一个Haskell包,它依赖于一个专有的DLL。我还使用stack工具。该库有x86和x64版本。据我所知,我不能通过修改.cabal文件来完成。因此,我试图通过更新Setup.hs来实现这一点。这是我的安装脚本: import Distribution.Simple import Distribution.PackageDescription import Distribution.Simple.LocalBuildInfo import System.Directory upda

我正在编写一个Haskell包,它依赖于一个专有的DLL。我还使用
stack
工具。该库有x86和x64版本。据我所知,我不能通过修改
.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
          }
这仍然会导致在测试套件链接期间出现未定义的引用。为什么?

只需两步:

  • “txmlconnector64.dll”
    替换为
    “txmlconnector64”
  • .cabal
    文件集
    构建类型:自定义
    以允许其使用您的
    设置。hs

  • 类似于
    ghc选项:-L-llib64
    的东西可能会起作用。因为您知道如何从命令行编译它。。告诉阴谋集团就这么做。我想这充其量只是一个变通办法,充其量只是一个丑陋的黑客行为。但是当涉及到Haskell工具链时,Windows和FFI很少能很好地发挥作用。。如果黑客对你有效,我会认为自己很幸运。@Leonidas你能发布你的更新作为答案,并接受它,将其从未回答问题队列中删除吗?谢谢@用户2407038,这不起作用。阴谋集团无法解析文件…@sclv,我认为这不是答案。软件包尚未生成。我正在研究
    设置。hs
    现在,也许这就是线索。啊,明白了,我想更新意味着你解决了它。很抱歉弄糊涂了很高兴你弄明白了。您认为您遇到了任何可以作为bug报告或cabal安装功能请求的情况吗?如果您能解释一下添加哪些内容可能有用,我很乐意在报告后做一点跟进…@sclv,这样的问题已经存在。你可以在更新后的帖子中找到链接。
    > stack test