2016-03-20 11 views
2

私は独自のDLLに依存するHaskellパッケージを書いています。私もstackツールを使用します。ライブラリにはx86およびx64バージョンがあります。 this issueによると、.cabalファイルを変更することでできません。だから、私はSetup.hsを更新してやろうとしています。これは私のセットアップスクリプトです:独自の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 
      } 

は、それから私は呼ん:

> stack test 

これはまだテストスイートのリンク時に未定義の参照につながります。どうして?

+0

何かを使用できるようにするbuild-type: Customを設定しました'働くかもしれない。あなたはコマンドラインからコンパイルする方法を知っているので、ちょうどそれを行うようにカバールに伝えてください。私はこれが最も回避策であり、せいぜい醜いハックだと思います。しかし、ハスケルのツールチェーンについては、WindowsやFFIではうまくいかないことがほとんどありません。 – user2407038

+0

@Leonidasあなたは答えとしてあなたのアップデートを投稿し、これを受け入れて未回答の質問キューからこれを削除できますか?ありがとう! – sclv

+0

@ user2407038、これは動作しません。 Cabalはファイルを解析できません... – Leonid

答えて

1

わずか2つのステップ:-L -llib64:

  1. .cabalファイルで"txmlconnector64"
  2. "txmlconnector64.dll"を交換し、それが `GHC-オプションのようなあなたのSetup.hs
+0

あなたはこれを理解してうれしいです。バグレポートやカバールインストールの機能リクエストに該当するものに遭遇したと思いますか?あなたがそれを追加するのに役立つかもしれないことを説明することができれば、私はそれを報告して少しフォローアップをしてうれしいです。 – sclv

+0

@sclv、そのような問題は既に存在します。更新された投稿にリンクがあります。 – Leonid

関連する問題