【问题标题】:Link a foreign C library with Haskell用 Haskell 链接一个国外的 C 库
【发布时间】:2021-01-04 02:28:23
【问题描述】:

讨论 Haskell 的 FFI 的在线教程都使用本地定义的 C 文件制作了简单的示例,然后将其编译并与 Haskell 二进制文件链接。我将如何做一些更实质性的事情,比如将我的 Haskell 二进制文件与蓝牙库链接?

想象一下,我的系统上安装了 BlueZ 和所需的开发人员库。在 C 语言中,我只需将标志 -lbluetooth 传递给 GCC,它就会按预期工作。我可以在我的 cabal 文件中将此标志传递给 Haskell 并期望我的 FFI 导入工作吗?

【问题讨论】:

    标签: haskell hyperlink ffi flags bluez


    【解决方案1】:

    你的 cabal 文件中会有这样的内容:

    library
      exposed-modules: YourBluetoothBinding
      build-depends:   {- Haskell dependencies -}
      c-sources:     {- your own C files that may be needed -}
      pkgconfig-depends: bluez
      includes: bluetooth/bluetooth.h
      extra-libraries: bluetooth
    

    我不确定pkgconfig-depends 是否在 Windows 上执行任何操作。

    【讨论】:

    • 我已经尝试过这项工作,但鉴于它确实有效,你怎么知道像这样包含它?我想了解如何为任意 C 库执行此操作。
    • 我不知道那些特定的蓝牙选项是否正确。至于阴谋集团的领域——不幸的是,their documentation 极其贫瘠;我基本上只是通过查看 Hackage 上现有的 FFI 包如何做到这一点来了解它们的。
    • ffmpeg-light 绑定非常好。您可以看到 that cabal file 使用 pkgconfig-depends 如上所示。可以手动编写实际的外部函数绑定,也可以使用另一种语言+工具,例如 c2hs 或 hsc2hs。
    • @ThomasM.DuBuisson ffmpeg-light 绑定非常好,是如何使用 cabal 设置 C 依赖关系的好例子;但我还没有 100% 的成功率让它编译。我不记得错误消息是什么,但我认为这基本上是版本限制问题。
    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多