首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“the之痛”的来源在哪里?

“the之痛”的来源在哪里?
EN

Stack Overflow用户
提问于 2016-06-29 09:59:59
回答 1查看 185关注 0票数 0

我正在运行stack版本1.1.2 x86_64 hpack-0.14.1

代码语言:javascript
复制
$ 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 ghciGHC.Paths时,返回错误的路径。

代码语言:javascript
复制
$ 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。

代码语言:javascript
复制
[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车吗?

代码语言:javascript
复制
{-# 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没有看到任何东西。

代码语言:javascript
复制
$ 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中也没有什么特别之处。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-29 11:48:36

您几乎是对的,GHC_变量是来自Setup.hs的CPP定义。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38096298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档