gpt4 book ai didi

haskell - 解决 GHC 'I found a duplicate definition for symbol ...'

转载 作者:行者123 更新时间:2023-12-03 23:24:35 24 4
gpt4 key购买 nike

当运行导入多个包的 Haskell 程序时:

import Text.Feed.Import 
import Network.HTTP

main = do
page <- simpleHTTP (getRequest "http://stackoverflow.com")
print $ page

我得到一个这样的错误(注意:这个问题旨在解决一般问题,这个具体案例只是一个例子):
GHCi runtime linker: fatal error: I found a duplicate definition for symbol get_current_timezone_seconds
whilst processing object file
/usr/lib/ghc/time-1.4.0.1/HStime-1.4.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

按照 in this previous post 的描述重新安装软件包(例如 HTTPfeed 在上述情况下)没有帮助。我该如何解决这个问题?

最佳答案

为什么会出现此错误

此问题并非特定于单个软件包(例如,它在三年前与 Yesod 相关的 here 进行了描述),而是由您导入的不同库(例如 HTTPfeed )链接到不同版本的单个库(此问题仅发生在导出 C 样式符号的库中。它们的符号名称不是唯一的。time 是这些包之一。)。

如错误消息中所述,在这种特定情况下导致问题的库是 time-1.4.0.1 .

诊断确切的问题

首先,您需要确定您的库存在哪些不同版本。您可以通过使用 ghc-pkg describe <packagename> 检查软件包来做到这一点。 ,或者只是看看你的cabal安装目录(通常为 ~/.cabal/lib )。

在撰写本文时,问题是由 time-1.4.0.1 引起的。和 time-1.4.1正在安装。通过使用 ghc-pkg describe我发现 feed (仅 feed ,在我的情况下),链接到 time-1.4.1而大约 100 个库链接到 time-1.4.0.1 .

如何解决

如上所述,确定较少包依赖的库版本(导致错误的库,如错误消息中所示)。您需要重建所有依赖它的包。就我而言,这是 time-1.4.1 .

然后,卸载软件包:

$ ghc-pkg unregister time-1.4.1 --force 
unregistering time-1.4.1 would break the following packages: feed-0.3.9.2 (ignoring)

请注意 feed软件包现在已损坏,需要重建和重新安装。然而,重建后,它不会链接到 time-1.4.1但是 time-1.4.0.1 (在我的具体情况下)。此重新链接将解决重复符号问题。
$ cabal install feed

如果之后仍然出现错误,请按照上述说明重新检查所有依赖项。您需要确保在使用 ghc-pkg describe <pkg> 分析时,您导入的任何库都将显示与它链接的库相同的库。

更新:为了找出哪些包依赖于有问题的库,只需使用 ghc-pkg unregister没有 --force标志(感谢 John J. Camilleri 指出这一点!)。请注意,如果没有软件包依赖于所述有问题的软件包,它将被删除。

关于haskell - 解决 GHC 'I found a duplicate definition for symbol ...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21272056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com