You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置GHC与Cabal默认生成动态链接二进制文件及库?

嘿,我来帮你搞定这个问题!针对你在Ubuntu 16.04上通过apt安装的GHC 8.2.2,我们可以通过修改配置文件,让GHC和cabal默认生成动态链接的二进制文件与库,不用每次手动敲一堆参数~

一、让Cabal默认启用动态链接(最推荐的方式)

因为你主要是用cabal install来构建项目,直接修改Cabal的全局配置文件是最省心的:

  1. 打开你的用户级Cabal配置文件,路径是~/.cabal/config(如果不存在,先执行一次cabal update生成)。
  2. 在文件里找到或者添加以下配置项:
    # 启用动态库构建
    shared: True
    # 启用动态链接的可执行文件
    executable-dynamic: True
    
    要是你看到的是带--注释的旧格式,比如--enable-shared: False,直接把--去掉,把False改成True就行。

保存配置后,以后再执行cabal install,就会自动给所有依赖和项目加上--enable-shared --enable-executable-dynamic参数,默认生成动态链接的产物了。

二、针对单个项目的临时配置(不想改全局的话)

如果只想让某个项目默认用动态链接,不用改全局配置,就在项目根目录下创建一个cabal.project文件,写入:

packages: .
shared: True
executable-dynamic: True

这样只有这个项目构建时会用动态链接,其他项目不受影响。

三、直接给GHC设置默认参数(可选)

如果你想让GHC本身默认生成动态链接的二进制文件,可以通过设置环境变量GHC_OPTS:

export GHC_OPTS="-dynamic"

把这行加到你的~/.bashrc或者~/.zshrc里,每次终端启动就会生效。不过这种方式只影响直接用ghc编译的情况,cabal还是会自己管理参数,所以更推荐前面的Cabal配置方式。

四、注意事项
  • 因为你是用apt安装的GHC,系统里应该已经自带了必要的动态库依赖,但如果遇到某个包构建失败说找不到动态库,可以试试用apt-get install libghc-<package-name>-dev安装对应的开发包。
  • 少数比较旧的Haskell包可能不支持动态链接,如果遇到这类情况,可以临时跳过动态链接,比如执行cabal install --disable-shared --disable-executable-dynamic <package-name>来单独处理这个包。
  • 动态链接的可执行文件体积会小很多,但运行时依赖系统中的Haskell动态库,部署到其他机器时要确保目标机器安装了对应的库哦。

内容的提问来源于stack exchange,提问作者thor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:47:30