2

我有我想从 haskell 调用的 pdflib_py.so 库。我没有头文件。如您所见,lib 的名称不是标准的 libbla 形式。

我如何从 haskell 访问它?

我跟着 c2hs 教程。但它需要一个头文件(我没有),而 ghc 需要一个库名称为 libbla 格式。我当然可以将 pdflib_py.so 重命名为 libpdfpy.so,事实上我试过了(它没有用),但是假设你不能从 haskell 访问一个库是很愚蠢的,因为它的名字。我肯定在这里遗漏了一些东西。

您可以从这里下载 pdflib 库http://www.pdflib.com/download/pdflib-family/pdflib-8/

他们有 c++、java、php、python 等的捆绑包。

为什么我不使用 c++ 库而是使用 python 库?嗯,c++ 库 libbpdf.a 需要用 g++ 编译。而且haskell不适用于g ++,我必须先编写一个C包装器。幸运的是,有人已经为我做了。这就是 pdflib_py.so 是什么 - libpdf 库上的 ac 包装器。

那么,我如何使用具有非标准名称且没有来自 haskell 的头文件的库?

4

1 回答 1

4

我不认为你的方法是正确的。您应该使用 g++ 将 pdflib 编译到共享库中,然后链接它。他们提供的 C++ 库已经使用“extern C”包装器,因此导出的符号将完全符合您的预期。

综上所述,我提出以下解决方案:

  1. 下载 C++ 包
  2. 使用 g++ 编译以制作共享的 .so 库
  3. 使用包中的头 .h 文件进行 Haskell 绑定
  4. 将 Haskell 代码链接到 .so 库
于 2012-04-15T21:59:03.943 回答