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

这是一个钻石依赖问题。你有一个基于一个字节串版本构建的 cryptohash 版本,但 GHC 系统的其余部分是针对另一个版本构建的。因此,当包链接在一起时,会链接两个略有不同的字节串版本。

通常这是可以的,只要字节串类型是兼容的。

但是,bytestring 包含一个用于某些实用程序的小型 C 库。C 库具有非唯一符号,可防止重复链接,从而导致您的错误。

您需要确保 cryptohash 是针对相同版本的字节串构建的。

于 2012-11-15T13:25:16.923 回答