当我尝试使用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编译时,它可以正常工作,并且/ usr / lib中存在libncursesw.so。我在Void Linux上。有什么想法在寻找Stack?
答案 0 :(得分:1)
这似乎是为Void Linux选择了bindist
堆栈的问题-通常可以猜到是正确的,但是它可能会在某些发行版中引起问题。 tinfo6
变量尝试加载libtinfo.so
,因为某些发行版通过该共享库文件提供ncurses6
。您可以尝试configuring the variant manually-您可能需要standard
。如果执行此操作,Stack将安装新的GHC版本,但是它将更改它尝试为ncurses
加载的共享对象。
这实际上是由an issue with GHC引起的-如果使用链接器 file 的各个ncurses
文件之间的发行版链接,而不是实际链接,GHC将不会跟随正确,而是抱怨该文件不存在。解决方案是将链接器文件替换为指向目标的链接。