gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:30:25 25 4
gpt4 key购买 nike

假设正在使用 stack 构建工具来创建一个 Haskell 库(从 Hackage 导入包等)与 C/C++ 项目一起使用,其中 main 位于 C/C++ 中。

假设您的项目名为 Lib.hs (它使用 hackage 中的外部库),有没有办法使用堆栈来导出您的 Lib.oLib.hiLib_stub.h 由 C/C++ 编译器(例如 gccg++)使用?

编辑:一个相关的问题可能是:“如何使用 Stack 作为构建工具来与 Haskell 和 C/C++ 项目一起使用,其中 main 是位于 C/C++ 中?

编辑2:经过反射(reflection),解决这个问题的一种方法是照常使用 Stack,但将 C/C++ 主函数迁移到 Haskell。这是最好的方法吗?这是否会带来巨大的性能成本或我应该注意的事情?

最佳答案

堆栈本身无法真正做到这一点。

Cabal 中添加了对生成所谓的“外部库”的支持,但尚未发布版本。请参阅提交 382143这将生成一个共享库,该库动态链接到所使用的每个 Haskell 包的动态版本。

您可以使用堆栈构建您的包,然后您可以组装一个 native 库。在 Galua项目中我们使用自定义Setup.hs来做到这一点和一个单独的 linking script .

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

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

关于haskell - 如何使用 Haskell 的堆栈构建工具导出 C/C++ 使用的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com