我正在运行stack版本1.1.2 x86_64 hpack-0.14.1
$ stack exec which ghc
Run from outside a project, using implicit global project config
Using resolver: lts-5.10 from implicit global project's config file: /home/wisut/.stack/global-project/stack.yaml
/home/wisut/.stack/programs/x86_64-linux/ghc-7.10.3/bin/ghc但是,当使用stack ghci和GHC.Paths时,返回错误的路径。
$ stack ghci
Run from outside a project, using implicit global project config
Using resolver: lts-5.10 from implicit global project's config file: /home/wisut/.stack/global-project/stack.yaml
Error parsing targets: The specified targets matched no packages. Perhaps you need to run 'stack init'?
Warning: build failed, but optimistically launching GHCi anyway
Configuring GHCi with the following packages:
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
Ok, modules loaded: none.
Prelude> GHC.Paths.ghc
"/usr/bin/ghc-7.10.3"我运行的是带有GHC8.0.1的Arch,因为在stack之外没有ghc-7。
[wisut@earth ~]$ which ghc
/usr/bin/ghc
[wisut@earth ~]$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.0.1
[wisut@earth ~]$ ls -al /usr/bin/ghc
lrwxrwxrwx 1 root root 9 May 24 18:28 /usr/bin/ghc -> ghc-8.0.1查看GHC.Paths源代码,我不知道值来自何处。是ENV车吗?
{-# LANGUAGE CPP #-}
module GHC.Paths (
ghc, ghc_pkg, libdir, docdir
) where
libdir, docdir, ghc, ghc_pkg :: FilePath
libdir = GHC_PATHS_LIBDIR
docdir = GHC_PATHS_DOCDIR
ghc = GHC_PATHS_GHC
ghc_pkg = GHC_PATHS_GHC_PKG运行stack exec env没有看到任何东西。
$ stack exec env | grep -i ghc
Run from outside a project, using implicit global project config
GHC_PACKAGE_PATH=/home/wisut/.stack/global-project/.stack-work/installx86_64-linux/lts-5.10/7.10.3/pkgdb:/home/wisut/.stack/snapshots/x86_64-linux/lts-5.10/7.10.3/pkgdb:/home/wisut/.stack/programs/x86_64-linux/ghc-7.10.3/lib/ghc-7.10.3/package.conf.d
PATH=/home/wisut/.stack/global-project/.stack-work/install/x86_64-linux/lts-5.10/7.10.3/bin:/home/wisut/.stack/snapshots/x86_64-linux/lts-5.10/7.10.3/bin:/home/wisut/.stack/programs/x86_64-linux/ghc-7.10.3/bin:/home/wisut/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl我怎样才能修正错误的值?如何配置stack使GHC.Paths返回正确的?
UPD我试着用--no-system-ghc运行stack,但没有什么区别。我试图删除我的~/.cabal和~/.stack文件夹。我不得不执行stack setup,在stack重新安装编译器之后,它不会给出错误的路径,但是它不会给我任何路径,该命令的输出现在是空的。我在Setup.hs中也没有什么特别之处。
发布于 2016-06-29 11:48:36
您几乎是对的,GHC_变量是来自Setup.hs的CPP定义。
let buildinfo = emptyBuildInfo{
cppOptions = ["-DGHC_PATHS_GHC_PKG=" ++ show c_ghc_pkg,
"-DGHC_PATHS_GHC=" ++ show c_ghc,
"-DGHC_PATHS_LIBDIR=" ++ show libdir,
"-DGHC_PATHS_DOCDIR=" ++ show docdir ]
}关于您的错误路径问题,请尝试运行stack --no-system-ghc ghci。如果它仍然为GHC路径显示"/usr/bin/ghc-7.10.3",那么当您为GHC-7.10.3编译ghc-paths时,我怀疑在那里有 GHC,而且由于stack在不重建东西方面很好,所以旧版本的ghc-paths仍然存在。我不知道如何在快照中重新构建包,然后重新启动~/.stack;这可能是个好主意。如果你改变了你的全球GHC计划。
有一个相关的问题:停止使用系统-ghc。
https://stackoverflow.com/questions/38096298
复制相似问题