假设有人正在使用[-3, -9, 0].
构建工具来创建Haskell库(从Hackage导入包,等等)以用于stack
所在的C / C ++项目位于C / C ++ 。
假设您的项目名为main
(使用来自hackage的外部库),是否有办法使用堆栈导出Lib.hs
,Lib.o
和Lib.hi
由Lib_stub.h
或gcc
?
编辑:相关问题可能是:"如何使用Stack作为构建工具与Haskell&其中g++
位于C / C ++中的C / C ++项目?
EDIT2:经过反思,解决此问题的一种方法是像往常一样使用Stack,但将C / C ++主函数迁移到Haskell。这是最好的方法吗?是否有巨大的性能成本或我应该注意的任何事情?
答案 0 :(得分:4)
Stack无法真正做到这一点。
支持为Cabal添加所谓的“外国图书馆”,但它尚未发布。请参阅commit 382143这将生成一个共享库,该库可动态链接所使用的每个Haskell包的动态版本。
您可以使用堆栈构建包,然后您可以组装单个本机库。在Galua项目中,我们使用自定义Setup.hs和单独的linking script执行此操作。
此链接过程的结果是您获得了一个适合包含在C项目中的独立静态链接库:libgalua.a
。
请注意,要在Linux上创建适合链接到共享库的独立库,您需要重新编译GHC以生成PIC静态库(macOS默认情况下会这样做)。