繁体   English   中英

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

[英]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.oLib.hiLib_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM