在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终端里执行下面的命令就能搞定:
- 先更新包数据库:
pacman -Syu - 安装需要的依赖包:
解释一下:openssl包会同时提供ssl和crypto库,regex包对应缺失的regex库,libgit2则是hlibgit2依赖的核心C库,这样就能把所有缺失的库补全了。pacman -S mingw-w64-x86_64-libgit2 mingw-w64-x86_64-openssl mingw-w64-x86_64-regex
第二步:让Cabal识别/usr/include目录的头文件
解决了库的问题,接下来让Cabal找到/usr/include里的头文件,有两种常用方法:
方法一:临时指定目录(单次生效)
直接在cabal build命令里加上头文件和库目录的参数,这样不用改配置,适合临时测试:
cabal build --extra-include-dirs=/usr/include --extra-lib-dirs=/usr/lib
方法二:配置全局Cabal文件(永久生效)
如果以后经常需要编译这类依赖MSYS2库的Haskell项目,可以把目录配置到Cabal的全局设置里:
- 先生成(或打开)Cabal的用户配置文件:
cabal user-config init - 打开配置文件(通常在
~/.cabal/config或者Windows路径C:\Users\<你的用户名>\AppData\Roaming\cabal\config),找到下面的配置项,去掉前面的注释符号--,并修改为:extra-include-dirs: /usr/include extra-lib-dirs: /usr/lib - 保存文件后,以后再运行
cabal build就会自动去这些目录找头文件和库了。
额外注意事项
- 一定要在MSYS2的mingw64终端里执行所有命令!普通的CMD或PowerShell识别不了
/usr这类MSYS2的路径,环境变量也不对。 - hlibgit2依赖的ws2_32、winhttp、crypt32、rpcrt4这些是Windows系统自带的库,不需要额外安装,Cabal会自动找到它们。
做完这些步骤,再重新运行cabal build,应该就能顺利编译hlibgit2了。
备注:内容来源于stack exchange,提问作者Cirdec
相关产品推荐
相关产品推荐

