[英]How to Use Haskell's Stack Build Tool to Export a Library to Be Consumed by C/C++?
假设有人正在使用stack
构建工具来创建一个Haskell库(从Hackage导入包,依此类推) ,以便与C / C ++中的main
一起使用的C / C ++项目一起使用 。
假设您的项目名为Lib.hs
(使用来自hackage的外部库),有没有办法使用堆栈导出Lib.o
, Lib.hi
和Lib_stub.h
以供C / C ++编译器(如gcc
还是g++
?
编辑:一个相关的问题可能是:“如何使用Stack作为构建工具与Haskell和C / C ++项目一起使用,其中main
位于C / C ++中?
编辑2:经过反思,解决此问题的一种方法是像往常一样使用Stack,但将C / C ++主函数迁移到Haskell。 这是最好的方法吗? 是否存在巨大的性能成本或我应该注意的任何事情?
Stack本身并不能真正做到这一点。
有人支持在Cabal中添加所谓的“外国图书馆”,但它尚未发布。 请参阅commit 382143这将生成一个共享库,该库可动态链接所使用的每个Haskell包的动态版本。
您可以使用堆栈构建包,然后您可以组装单个本机库。 在Galua项目中,我们使用自定义Setup.hs和单独的链接脚本来完成此操作 。
这个链接过程的结果是你得到一个适合包含在C项目中的独立静态链接库: libgalua.a
。
请注意,要在Linux上创建适合链接到共享库的独立库,您需要重新编译GHC以生成PIC静态库(默认情况下,macOS会执行此操作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.