プラグイン パッケージをいじっていますが、問題が発生しました。
コードは次のとおりです。
Util/Header.hs
module Util.Header(PT(..)) where
data PT a = PT a deriving Show
Plug.hs
module Plug(helloPlugin) where
import Util.Header
helloPlugin :: PT Int
helloPlugin = PT 1
Main.hs
module Main where
import Util.Header
import System.Plugins
main :: IO ()
main = do
mv <- load "Plug.o" ["."] [] "helloPlugin"
case mv of
LoadFailure msg -> print msg
LoadSuccess _ v -> print $ show (v :: PT Int)
これはすべて正常に動作し、ghc でコンパイルします。Cabal を使用したビルドも問題なく動作しますが、実行可能ファイルを実行すると次のエラーが発生します。
plugintest: /home/kevin/.cabal/lib/plugins-1.5.4.0/ghc-7.6.3/HSplugins-1.5.4.0.o: unknown symbol `ghczm7zi6zi3_ErrUtils_zdsinsertzuzdsgo5_info'
plugintest: user error (resolvedObjs failed.)
私の非常に最小限のcabalファイル:
name: plugintest
version: 0.1.0.0
license-file: LICENSE
build-type: Simple
cabal-version: >=1.8
library
hs-source-dirs: src
exposed-modules: Util.Header
build-depends: base ==4.6.*, plugins ==1.5.*
executable plugintest
main-is: Main.hs
build-depends: base ==4.6.*, plugins ==1.5.*, plugintest == 0.1.0.0
hs-source-dirs: src
ここで問題は、/usr/lib/ghc-7.xx にインストールされた ghc パッケージの一部である "ErrUtils" モジュールが見つからないことだと思います。cabal を使用しているため、$HOME/.cabal を使用します。 /lib/ 代わりに。
/usr/lib を配布可能にしたいのであれば、明らかに使いたくないでしょう。悲しいことに、私はパッケージがどのように管理されているか、またプラグイン パッケージにも精通していません。
これは非常に面倒だと感じていますが、自分で解決策を見つけることができませんでした。
いくつか質問があります:
- これを配布可能にする方法で依存関係を機能させるにはどうすればよいですか?
- Plugin.o ファイルが実際に使用できるようになる前に、何に依存するかを事前に知る必要があるようです (正しく理解していれば)。この問題を心配する必要のない .o ファイルをパッケージ化する方法はありますか? (この質問があいまいすぎる場合は申し訳ありませんが、無視してください)
前もって感謝します!