如何在没有头文件的情况下使用haskell的共享库?

时间:2012-04-15 21:47:20

标签: haskell ffi

我有pdflib_py.so库我想从haskell打电话。我没有头文件。正如您所看到的,lib的名称不是标准的libbla形式。

如何从haskell访问它?

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

您可以从此处http://www.pdflib.com/download/pdflib-family/pdflib-8/

下载pdflib库

他们有c ++,java,php,python等的包。

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

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

1 个答案:

答案 0 :(得分:4)

我不认为你的方法是正确的。您应该将带有g ++的pdflib编译到共享库中,然后链接它。他们提供的C ++库已经使用了“extern C”包装器,因此导出的符号会像你期望的那样令人兴奋。

总之,我提出以下解决方案:

  1. 下载C ++包
  2. 使用g ++编译以制作共享的.so库
  3. 使用bundle中的头文件.h文件来制作Haskell绑定
  4. 将Haskell代码链接到.so库