2012-04-15 75 views
2

我有pdflib_py.so庫,我想從haskell調用。我沒有頭文件。正如你所看到的,lib的名字不是標準的libbla形式。如何使用haskell中沒有頭文件的共享庫?

我如何從haskell訪問它?

我跟着c2hs教程。但它需要一個頭文件(我沒有),而且ghc需要庫名稱爲libbla格式。我當然可以將pdflib_py.so重命名爲libpdfpy.so,實際上我嘗試了它(它不起作用),但是這很愚蠢,以至於無法從Haskell中訪問庫,因爲它的名稱。我肯定在這裏錯過了一些東西。

你可以從這裏http://www.pdflib.com/download/pdflib-family/pdflib-8/

下載的PDFlib庫他們對C++捆綁,JAVA,PHP,蟒蛇等

我爲什麼不使用C++庫,但蟒蛇呢?那麼,C++庫libbpdf.a需要用g ++編譯。並且haskell不能用於g ++,我必須先寫一個C封裝器。幸運的是有人已經爲我做了。這是一個pdflib_py.so - 一個關於libpdf庫的c包裝。

那麼,我如何使用非標準名稱的庫和哈希克爾沒有頭文件?

回答

4

我不認爲你的方法是正確的。你應該用g ++編譯pdflib到共享庫中,然後鏈接它。他們提供的C++庫已經使用了「extern C」包裝器,所以導出的符號會像你期望的那樣激動人心。

綜上所述,我提出以下解決方案:

  1. 下載C++束
  2. 編譯克++,使共享.so庫
  3. 使用報頭從束h文件做出的Haskell綁定
  4. 對.so庫鏈接Haskell代碼
+0

我沒有這個COMAND編譯:G ++ -shared -fPIC -o libpdf.so libpdf.a然後拿到包子鏈接錯誤:dist/build/hello/hello-tmp/Main.o:在函數's4lT_info'中: (.text + 0x2fd):對'PDF_delete'的未定義引用... – 2012-04-16 01:28:27

+0

Thx,它工作。正確的命令是:g ++ -shared -fPIC -g -o libpdf.so -Wl, - whole-archive libpdf.a -Wl, - no-whole-archive – 2012-04-16 15:39:52

相關問題