【发布时间】:2015-09-20 23:05:29
【问题描述】:
我想在 Haskell 项目中使用外部库 RDFox。
上下文:我正在使用 GHC 7.10 和 stack 处理 64 位的 Windows 和 Linux。 RDFox 是用 C++ 编写的。可以使用 Java 和 Python 包装器下载 RDFox 共享库(.dll、.so)。
目标:我想在我的 Haskell 项目中重用 RDFox (.dll, .so) 编译的库,所以我需要为 RDFox 创建一个 Haskell 包装器。
问题: 作为 Haskell 的新手,我很难知道从哪里开始。我找到了几个关于该主题的页面(来自 Haskell wiki 和 StackOverflow),但我并不清楚工作流程和配置。
问题:我想知道:
- 如何配置 stack 和 cabal 以使用外部库,在 Windows 或 Linux 上构建(不同的机器,相同的存储库)。
- 如何配置 GHCi 以在此外部库上进行交互式测试。
- 将 Python 包装器翻译成 Haskell 是最好的方法吗?我想避免分析 RDFox C++ 代码。
【问题讨论】:
-
首先您可能需要为 C++ api 创建一个 C 导出的包装器。
-
C++ 中的命名约定比 C 中复杂得多。我认为 FFI 不支持对非 extern-C 事物进行名称修改。
-
如果您知道名称修改方案,您可以使用
Win32包中的System.Win32.DLL和unix包中的System.Posix.DynamicLinker。但是,两个平台之间的名称修改可能会有所不同,因此您必须做两次工作。如果你写一个 C 包装器,你只需要做一次。 -
只要学会爱上 C++ 中的 extern "C"{}。
-
您不需要创建任何 C 包装器。必要的
extern "C"已经到位(如果没有它,将很难创建 Python 包装器)。
标签: haskell shared-libraries ghc cabal haskell-stack