4

最近、職場の PC を からUbuntuに切り替えましたArch Linux。そして、次のエラーが発生しました(スタックを使用してプロジェクトをビルドしています):

setup-Simple-Cabal-1.22.4.0-ghc-7.10.2: 外部ライブラリへの依存関係がありません:
* C ライブラリがありません: HSrts-ghc7.10.2
この問題は通常、このライブラリを提供するシステム パッケージをインストールすることで解決できます ( 「-dev」バージョンが必要な場合があります)。ライブラリが既にインストールされているが、標準以外の場所にある場合は、フラグ --extra-include-dirs= および --extra-lib-dirs= を使用してその場所を指定できます。

私が理解している限り、Linux ディストリビューションの違いによる問題は発生しないはずです。

私が試したこと:
- ライブラリが存在するパスを --extra-lib-dirs で追加します -
stack/ghc のバージョンが両方のシステムで同じであることを確認します
- 2 つのシステム間の関連する違いを見つけることに失敗しました
( gcc のバージョンは異なりますが、何も変更されていません)

問題なくビルドできる ubutu ベースの docker コンテナがあります。

私が考えることができる唯一のことは、このライブラリにはHaskell-Runtimeが含まれているため、ランダムなCライブラリとは異なる方法で処理されるということです. しかし、この違いがどうなるかはわかりません。または、Arch System で別の処理がどのように問題を引き起こすか。

ここに私の .cabal ファイル (フォルダーにはプロジェクト全体も含まれています): https://github.com/opencog/atomspace/blob/master/tests/haskell/libExecutionOutputTest/opencoglib.cabal

4

1 に答える 1

1

さて、.cabal ファイルでライブラリを指定する代わりに、回避策を見つけました。

...  
extra-libraries: HSrts-ghc7.10.2   
...

これを stack.yaml ファイルに追加します。

...
ghc-options:
    package-name: -lHSrts-ghc7.10.2
...

.cabal ファイルに実行可能ファイルも定義されている場合、ライブラリはライブラリに含まれているだけではないため、実行可能ファイルが壊れます。また、実行可能ファイルにランタイム ライブラリを含めると、即座にセグメンテーション エラーが発生します。

于 2015-12-15T07:42:37.033 に答える