ghci -v0 --interacti-6ren">
gpt4 book ai didi

haskell - 调试 GHCI 中的 "duplicate definition for symbol"错误

转载 作者:行者123 更新时间:2023-12-04 08:52:17 26 4
gpt4 key购买 nike

我对 ghci 有疑问,我需要有关如何调试它的建议。问题是,当我从导入的项目中执行一个函数时,我有一个重复的定义错误并且 ghci 退出,因为它无法继续:

> ghci -v0 --interactive -ignore-dot-ghci -isrc -idist/build/autogen tests/System/Console/Hawk/PreludeTests.hs -no-user-package-db -package-db /mnt/git/hawk/.cabal-sandbox/x86_64-linux-ghc-7.6.3-packages.conf.d
*System.Console.Hawk.PreludeTests> test [] "1" ""


GHCi runtime linker: fatal error: I found a duplicate definition for symbol
__stginit_stringsearchzm0zi3zi6zi5_DataziByteStringziSearch
whilst processing object file
/mnt/git/hawk/.cabal-sandbox/lib/x86_64-linux-ghc-7.6.3/stringsearch-0.3.6.5/libHSstringsearch-0.3.6.5.a
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.

问题是我找不到发生这种情况的地方。该符号在我的 cabal 沙盒中是独一无二的:

> for f in `find .cabal-sandbox -type f -iname "*.a"`; do nm $f | grep '__stginit_stringsearchzm0zi3zi6zi5_DataziByteStringziSearch$'; done
0000000000000000 D __stginit_stringsearchzm0zi3zi6zi5_DataziByteStringziSearch

所以可能是 stringsearch库以某种方式加载了两次,但 ghci 对此含糊其辞。

我想知道是否有办法对此进行调试,或者至少可以在 ghci 杀死自己之前获得有关错误的更多信息。我已经尝试更改详细程度,但我仍然没有得到任何信息。

最佳答案

当您间接依赖于导出相同符号的两个不同版本的库时,通常会发生这种情况。例如,如果您的沙箱外部(例如在全局包 db 中)也有一个依赖于那里的字符串搜索的库,则可能会发生这种情况。

此外,要获得更多调试信息,您应该传递一个指示更高详细程度的标志。

关于haskell - 调试 GHCI 中的 "duplicate definition for symbol"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386524/

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