OS X El Capitan下cabal install parsec报错C Compiler阶段失败求助
解决OS X El Capitan上Cabal安装Parsec时的
-no-pie编译错误 我之前在OS X El Capitan 10.11.6上碰到过一模一样的问题!这个报错的根源很明确:Cabal给C编译器传递了-no-pie参数,但你系统里的gcc其实是Apple Clang的伪装(从你的版本信息能看到,实际是Apple LLVM version 7.0.0),而这个版本的Clang并不支持-no-pie这个选项,所以编译直接失败了。
下面给你几个可行的解决办法:
1. 临时应急:指定编译参数安装Parsec
直接在安装命令里覆盖GHC的编译参数,用Clang支持的选项替代-no-pie:
cabal install parsec --ghc-options="-optc-fno-pie -optl-fno-pie"
这里-optc是给C编译器传递参数,-optl是给链接器传递参数,-fno-pie是Clang能识别的等价选项,这样就能绕过错误了。
2. 永久修复:修改Cabal全局配置
如果不想每次安装都加参数,可以修改Cabal的全局配置文件,让所有编译都使用兼容的参数:
- 打开
~/.cabal/config文件(如果没有就先执行cabal update生成) - 找到
ghc-options:这一行(如果不存在就自己添加) - 在后面加上
-optc-fno-pie -optl-fno-pie,最终类似这样:ghc-options: -optc-fno-pie -optl-fno-pie - 保存文件后,以后用Cabal安装任何包都不会再碰到这个问题。
3. 升级Cabal(推荐方案)
旧版本的Cabal对El Capitan的Clang兼容性不佳,升级到较新的Cabal版本通常能直接解决这类参数不兼容问题:
cabal update cabal install cabal-install
升级完成后,再执行cabal install parsec应该就能正常完成安装了。
至于为什么Stack能正常安装Parsec?因为Stack会独立管理自己的GHC工具链和编译配置,它默认的参数已经适配了旧版OS X的Clang,不会传递不兼容的-no-pie选项,所以没出现报错。
内容的提问来源于stack exchange,提问作者Etienne Bernard
相关产品推荐
相关产品推荐

