Cabal使用inline-c调用C代码执行install时找不到C头文件问题求助
配置错误点
includes字段填写错误:你已经通过include-dirs声明了cbits作为头文件搜索目录,includes只需填写头文件名本身即可。你写了cbits/genann.h会导致Cabal拼接路径后去搜索cbits/cbits/genann.h,自然找不到对应文件。install-includes字段用错场景:该字段是针对库(Library)段的配置,用于声明库安装时需要同步安装到系统头文件路径的头文件,放在可执行文件(Executable)段下不会生效,可执行文件本身也不需要安装头文件到系统路径。- 头文件未被声明为额外源文件:
cbits/genann.h没有加入extra-source-files配置,cabal 打包安装时不会把这个头文件纳入安装流程,inline-c 编译期加载头文件时就会报错。
修复后的配置调整
- 全局的
extra-source-files补充头文件路径:
extra-source-files: CHANGELOG.md , cbits/genann.h
- 调整Executable段的相关配置,删除无效的
install-includes行:
include-dirs: cbits , /usr/local/include includes: genann.h c-sources: cbits/genann.c
你不需要把C代码编译为目标文件放到系统路径,原来的 c-sources 配置是正确的,Cabal 会自动把 genann.c 和 Haskell 代码一起编译、链接到最终的可执行文件中,不需要单独处理C代码的安装。
内容的提问来源于stack exchange,提问作者McBear Holden
相关产品推荐
相关产品推荐

