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

在Windows下使用GHCup时,如何配置Cabal使其查找/usr/include目录下的头文件?

在Windows下使用GHCup时,如何配置Cabal使其查找/usr/include目录下的头文件?

我完全懂你现在的困扰——明明头文件就在/usr/include里,用GHCup的Cabal编译hlibgit2时就是找不到,还提示缺失regex、ssl、crypto这些C库,这事儿看起来简单但卡壳确实闹心,咱们一步步来解决:

第一步:先补全缺失的C依赖库

你遇到的Missing (or bad) C libraries: regex, ssl, crypto问题,本质是MSYS2环境里还没装这些库。在mingw64终端里执行下面的命令就能搞定:

  1. 先更新包数据库:
    pacman -Syu
    
  2. 安装需要的依赖包:
    pacman -S mingw-w64-x86_64-libgit2 mingw-w64-x86_64-openssl mingw-w64-x86_64-regex
    
    解释一下:openssl包会同时提供ssl和crypto库,regex包对应缺失的regex库,libgit2则是hlibgit2依赖的核心C库,这样就能把所有缺失的库补全了。

第二步:让Cabal识别/usr/include目录的头文件

解决了库的问题,接下来让Cabal找到/usr/include里的头文件,有两种常用方法:

方法一:临时指定目录(单次生效)

直接在cabal build命令里加上头文件和库目录的参数,这样不用改配置,适合临时测试:

cabal build --extra-include-dirs=/usr/include --extra-lib-dirs=/usr/lib

方法二:配置全局Cabal文件(永久生效)

如果以后经常需要编译这类依赖MSYS2库的Haskell项目,可以把目录配置到Cabal的全局设置里:

  1. 先生成(或打开)Cabal的用户配置文件:
    cabal user-config init
    
  2. 打开配置文件(通常在~/.cabal/config或者Windows路径C:\Users\<你的用户名>\AppData\Roaming\cabal\config),找到下面的配置项,去掉前面的注释符号--,并修改为:
    extra-include-dirs: /usr/include
    extra-lib-dirs: /usr/lib
    
  3. 保存文件后,以后再运行cabal build就会自动去这些目录找头文件和库了。

额外注意事项

  • 一定要在MSYS2的mingw64终端里执行所有命令!普通的CMD或PowerShell识别不了/usr这类MSYS2的路径,环境变量也不对。
  • hlibgit2依赖的ws2_32、winhttp、crypt32、rpcrt4这些是Windows系统自带的库,不需要额外安装,Cabal会自动找到它们。

做完这些步骤,再重新运行cabal build,应该就能顺利编译hlibgit2了。

备注:内容来源于stack exchange,提问作者Cirdec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:54:38