7

次の簡単なコードを検討してください。

import Crypto.Hash.SHA1 (hashlazy)
import qualified Data.ByteString as BS
main = return ()

インストールcabal install --global bytestringしてから取得します(ghc 7.4.1を使用して新しくインストールされたUbuntu 12.04マシンで):

GHCi runtime linker: fatal error: I found a duplicate definition for symbol
   fps_minimum
whilst processing object file
   /usr/local/lib/bytestring-0.10.0.1/ghc-7.4.1/HSbytestring-0.10.0.1.o
This could be caused by:
   * Loading two different object files which export the same symbol
   * Specifying the same object file twice on the GHCi command line
   * An incorrect `package.conf' entry, causing some object to be
     loaded twice.
GHCi cannot safely continue in this situation.  Exiting now.  Sorry.

私はそれで何ができますか?

4

1 に答える 1

6

これは、ダイヤモンドの依存関係の問題です。あるバージョンのバイト文字列に対して構築されたクリプトハッシュのバージョンがありますが、GHC システムの残りの部分は別のバージョンに対して構築されています。したがって、パッケージが一緒にリンクされると、わずかに異なる 2 つのバージョンのバイト文字列がリンクされます。

バイト文字列の型に互換性がある限り、通常はこれで問題ありません。

ただし、bytestring には一部のユーティリティ用の小さな C ライブラリが含まれています。C ライブラリには一意でないシンボルがあり、重複リンクを防ぐため、エラーが発生します。

暗号ハッシュが同じバージョンのバイト文字列に対して構築されていることを確認する必要があります。

于 2012-11-15T13:25:16.923 に答える