如何将包与专有 DLL 链接



我正在编写一个依赖于专有DLL的Haskell包。我也使用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
          }

然后我打电话:

> stack test

这仍然会导致在测试套件链接期间未定义的引用。为什么?

只需两个步骤:

  1. "txmlconnector64.dll"替换为"txmlconnector64"
  2. .cabal文件中,设置build-type: Custom以允许它使用您的Setup.hs

最新更新