如何使用Haskell的堆栈构建工具导出C / C ++消耗的库?

时间:2016-11-05 22:42:09

标签: haskell ffi haskell-stack

假设有人正在使用[-3, -9, 0]. 构建工具来创建Haskell库(从Hackage导入包,等等)以用于stack所在的C / C ++项目位于C / C ++

假设您的项目名为main(使用来自hackage的外部库),是否有办法使用堆栈导出Lib.hsLib.oLib.hiLib_stub.hgcc

等C / C ++编译器使用

编辑:相关问题可能是:"如何使用Stack作为构建工具与Haskell&其中g++位于C / C ++中的C / C ++项目?

EDIT2:经过反思,解决此问题的一种方法是像往常一样使用Stack,但将C / C ++主函数迁移到Haskell。这是最好的方法吗?是否有巨大的性能成本或我应该注意的任何事情?

1 个答案:

答案 0 :(得分:4)

Stack无法真正做到这一点。

支持为Cabal添加所谓的“外国图书馆”,但它尚未发布。请参阅commit 382143这将生成一个共享库,该库可动态链接所使用的每个Haskell包的动态版本。

您可以使用堆栈构建包,然后您可以组装单个本机库。在Galua项目中,我们使用自定义Setup.hs和单独的linking script执行此操作。

此链接过程的结果是您获得了一个适合包含在C项目中的独立静态链接库:libgalua.a

请注意,要在Linux上创建适合链接到共享库的独立库,您需要重新编译GHC以生成PIC静态库(macOS默认情况下会这样做)。