Haskell Stack不使用系统的Ghc。

13
我正在尝试使用Haskell Stack设置一个项目,但使用stack提供的ghc时,我遇到了-fPIC错误 GitHub issue 为了绕过fPIC问题,我正在尝试使用软件包管理器提供的GHC,使用7.10.3版本(stack目前使用8.0.2)
当我尝试强制stack使用系统ghc时,它会简单地忽略我。我已经尝试使用/home/user/.stack/config.yaml和{project}/stack.yaml system-ghc:true选项进行覆盖...但是在设置中,stack使用8.0.2版本。
我有什么遗漏吗?
TL;DR
Stack忽略了system-ghc:true选项
我正在运行Sabayon 16

“haskell-primer”是项目名称

stack list-dependencies

base 4.9.1.0
ghc-prim 0.5.0.0
haskell-primer 0.1.0.0
integer-gmp 1.0.0.1
rts 1.0

我认为(不确定)只有当依赖解析器认为它合适时,堆栈才会使用系统 GHC。检查您的某个依赖项是否需要 GHC8。 - n. m.
谢谢评论。我已经使用stack list-dependencies进行了检查。 stack list-dependencies base 4.9.1.0 ghc-prim 0.5.0.0 haskell-primer 0.1.0.0 integer-gmp 1.0.0.1 rts 1.0 - Stefano Cerruti
覆盖解析器到stack.yaml似乎是有效的。我编辑了它以使用lts-6.35,现在它映射到system-ghc。但是...我不知道这是否是问题的解决方案。我不想手动编辑所有的stack.yaml文件... - Stefano Cerruti
你为什么需要使用 GHC 系统?请在 stack.yaml 文件中指定所需的 lts 版本,Stack 将使用您需要的 GHC 版本。这是为特定项目选择特定版本的 GHC 的正确方法。 - user2407038
1个回答

25

system-ghc: true 设置为真允许 Stack 在系统 GHC 符合解析器限制的情况下使用它。如果不符合约束条件,它将不会强制使用系统 GHC。如果您的解析器需要 GHC 8,但您的系统只有 GHC 7,则无论您给出什么值,Stack 都不会使用您的系统 GHC。相反,如果 system-ghc: false 则 Stack 永远不会使用系统 GHC,无论其版本是否匹配。

来自 Stack 常见问题解答,重点在于:

如果您想要 stack 使用您的系统 GHC 安装,请使用 --system-ghc 标志或运行 stack config set system-ghc --global true 以使 stack 默认检查您的 PATH 是否有适当的 GHC。

请注意,仅当其版本与当前项目的配置(特别是resolver设置)兼容时,stack 才能使用系统 GHC 安装


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接