【问题标题】:Stack can't find -lncursesw堆栈找不到 -lncursesw
【发布时间】:2018-09-16 02:56:17
【问题描述】:

当我尝试使用 Stack 编译我的 Haskell 程序时,我收到以下错误:

Building executable 'fractal' for fractal-0.1.0.0..
[1 of 2] Compiling Main             ( app/Main.hs, .stack-work/dist/x86_64-linux-tinfo6/Cabal-2.2.0.1/build/fractal/fractal-tmp/Main.o )
 <command line>: can't load .so/.DLL for: /usr/lib/gcc/x86_64-unknown-linux-gnu/8.2.0/../../../../lib/libtinfo.so (-lncursesw: cannot open shared object file: No such file or directory)

 --  While building custom Setup.hs for package fractal-0.1.0.0 using:
  /home/lorxu/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.3 --builddir=.stack-work/dist/x86_64-linux-tinfo6/Cabal-2.2.0.1 build lib:fractal exe:fractal --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"

当我直接使用 GHC 编译时,它工作正常,并且 libncursesw.so 存在于 /usr/lib 中。我在 Void Linux 上。 Stack 正在寻找的任何想法?

【问题讨论】:

  • 您使用的是哪个操作系统/发行版?

标签: haskell haskell-stack


【解决方案1】:

这看起来像是为 Void Linux 选择的 bindist Stack 的问题 - 它通常猜对了,但它可能会导致某些发行版出现问题。 tinfo6 变体尝试加载 libtinfo.so,因为某些发行版通过该共享对象文件提供 ncurses6。你可以试试configuring the variant manually - 你可能想要standard。如果您这样做,Stack 将安装一个新的 GHC 版本,但它会更改它尝试为 ncurses 加载的共享对象。

编辑:

这实际上是由 an issue with GHC 引起的 - 如果发行版使用链接器 file 链接各种 ncurses 文件之间的链接,而不是实际链接,GHC 将无法正确跟踪它,而是抱怨文件不存在。解决方案是用指向目标的链接替换链接器文件。

【讨论】:

  • 这似乎没有任何改变。它确实安装了一个新的 GHC,但发生了同样的错误。
  • 您的/usr/lib 中的libtinfo.*libncursesw.* 的状态是什么?我不知道为什么-lncursesw 会尝试加载libtinfo.so,除非libncursesw 被符号链接到它——以及为什么你的系统GHC 不会有同样的问题,除非它直接加载libtinfo.so.6,而且链接到其他地方,比如libncursesw.so.6,就像在我的系统上一样(天知道为什么)。
  • 我有各种 libtinfo.so.* 链接到相应的 libncurses.so.*。据我所知,没有任何链接指向 libncursesw.so.*。 stack ghc 也没有这个问题,出于某种原因,但 stack ghci 有。
  • 看起来这是ghc 的问题,这取决于发行版如何处理从libncurses.solibncursesw.sogithub.com/commercialhaskell/stack/issues/440。该问题中指定了一种解决方法 - 它对您有用吗?
  • 是的,使 libncurses.so 成为 libncursesw.so 的符号链接解决了这个问题。谢谢!
猜你喜欢
  • 2020-08-17
  • 2021-06-30
  • 1970-01-01
  • 2013-10-02
  • 2022-01-10
  • 1970-01-01
  • 2020-02-28
  • 2017-11-05
  • 1970-01-01
相关资源
最近更新 更多