Linux下Haskell 9.4.8的GHCI启动失败求助:路径缺失问题
GHC 9.4.8启动失败:缺失lib64/ghc-9.4.8/bin目录的解决办法
问题核心回答
是的,/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/下必须存在包含可执行文件的bin目录,这是GHC标准安装结构的一部分,脚本中引用的路径是正确的预期路径,目录缺失说明安装过程存在损坏或未完成的情况。
解决步骤
强制重新安装GHC 9.4.8
最可能的原因是安装包下载损坏或解压不完全,执行以下命令重新安装:ghcup install ghc 9.4.8 --force安装完成后再次尝试启动
ghci。升级ghcup后重新安装
旧版本ghcup可能存在路径配置bug,先升级ghcup:ghcup upgrade升级完成后再执行上面的强制安装命令。
检查文件系统结构(临时修复方案)
如果重新安装后仍无bin目录,检查/root/.ghcup/ghc/9.4.8/下是否存在lib/ghc-9.4.8/bin目录(部分系统可能用lib而非lib64):ls -l /root/.ghcup/ghc/9.4.8/lib/ghc-9.4.8/若存在该目录,修改
ghc-9.4.8和ghci-9.4.8脚本中的路径:
将脚本里的lib64替换为lib,例如:# 修改ghc-9.4.8脚本中的行 exedir="/root/.ghcup/ghc/9.4.8/lib/ghc-9.4.8/bin" executablename="/root/.ghcup/ghc/9.4.8/lib/ghc-9.4.8/bin/./ghc-9.4.8" libdir="/root/.ghcup/ghc/9.4.8/lib/ghc-9.4.8/lib"注意:此为临时修复,优先推荐重新安装保证结构正确性。
验证权限
确保安装目录权限正常:chmod -R 755 /root/.ghcup/ghc/9.4.8/
问题相关信息
报错信息
/root/.ghcup/ghc/9.4.8/bin/ghc-9.4.8: line 12: /root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8: No such file or directory
ghci-9.4.8脚本内容
#!/bin/sh set -xv echo "In GHCI 9.4.8" exedir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin" exeprog="./ghci-9.4.8" executablename="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghci-9.4.8" bindir="/root/.ghcup/ghc/9.4.8/bin" libdir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib" docdir="/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8" includedir="/root/.ghcup/ghc/9.4.8/include" executable="$bindir/ghc-9.4.8" exec $executable --interactive "$@"
ghc-9.4.8脚本内容
#!/bin/sh set -xv echo "In GHC 9.4.8" exedir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin" exeprog="./ghc-9.4.8" executablename="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8" bindir="/root/.ghcup/ghc/9.4.8/bin" libdir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib" docdir="/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8" includedir="/root/.ghcup/ghc/9.4.8/include" exec "$executablename" -B"$libdir" ${1+"$@"}
执行日志
opensuse-64:~ # ghci echo "In GHCI 9.4.8" + echo 'In GHCI 9.4.8' In GHCI 9.4.8 exedir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin" + exedir=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin exeprog="./ghci-9.4.8" + exeprog=./ghci-9.4.8 executablename="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghci-9.4.8" + executablename=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghci-9.4.8 bindir="/root/.ghcup/ghc/9.4.8/bin" + bindir=/root/.ghcup/ghc/9.4.8/bin libdir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib" + libdir=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib docdir="/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8" + docdir=/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8 includedir="/root/.ghcup/ghc/9.4.8/include" + includedir=/root/.ghcup/ghc/9.4.8/include executable="$bindir/ghc-9.4.8" + executable=/root/.ghcup/ghc/9.4.8/bin/ghc-9.4.8 exec $executable --interactive "$@" + exec /root/.ghcup/ghc/9.4.8/bin/ghc-9.4.8 --interactive echo "In GHC 9.4.8" + echo 'In GHC 9.4.8' In GHC 9.4.8 exedir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin" + exedir=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin exeprog="./ghc-9.4.8" + exeprog=./ghc-9.4.8 executablename="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8" + executablename=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8 bindir="/root/.ghcup/ghc/9.4.8/bin" + bindir=/root/.ghcup/ghc/9.4.8/bin libdir="/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib" + libdir=/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib docdir="/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8" + docdir=/root/.ghcup/ghc/9.4.8/share/doc/ghc-9.4.8 includedir="/root/.ghcup/ghc/9.4.8/include" + includedir=/root/.ghcup/ghc/9.4.8/include exec "$executablename" -B"$libdir" ${1+"$@"} + exec /root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8 -B/root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/lib --interactive /root/.ghcup/ghc/9.4.8/bin/ghc-9.4.8: line 12: /root/.ghcup/ghc/9.4.8/lib64/ghc-9.4.8/bin/./ghc-9.4.8: No such file or directory
内容的提问来源于stack exchange,提问作者v0rl0n
相关产品推荐
相关产品推荐

