2012-04-15 10 views
2

私はhaskellから呼び出したいpdflib_py.soライブラリを持っています。私はヘッダファイルを持っていません。あなたが見ることができるように、libの名前は標準のlibbla形式ではありません。ヘッダファイルなしでhaskellから共有ライブラリを使用するには?

どのように私はそれをhaskellからアクセスしますか?

私はc2hsチュートリアルに従いました。しかし、ヘッダファイル(私は持っていない)を必要とし、ghcはライブラリ名をlibbla形式にする必要があります。私はもちろんpdflib_py.soをlibpdfpy.soにリネームすることができますが、実際に試してみましたが(動作しませんでしたが)、その名前のためにhaskellからライブラリにアクセスできないと仮定するのは愚かです。私は確かにここに何かを欠いている。私はC++ライブラリが、Pythonのいずれかを使用していないのはなぜ

ます彼らは、C++のためのバンドルを持ってここにhttp://www.pdflib.com/download/pdflib-family/pdflib-8/

からのPDFlibライブラリをダウンロードすることができ、Javaの、PHP、Pythonのなど

?まあ、C++ライブラリlibbpdf.aはg ++でコンパイルする必要があります。そして、haskellはg ++で動かないので、まずCラッパーを書く必要があります。幸いにも誰かが私のためにそれをしました。これがpdflib_py.soの機能です。libpdfライブラリのcラッパーです。

したがって、どのように私はhaskellからの標準的でない名前のヘッダーファイルのライブラリを使用しますか?

答えて

4

私はあなたのアプローチが正しいとは思わない。 g ++を使用してpdflibを共有ライブラリにコンパイルし、それとリンクする必要があります。彼らが提供しているC++ライブラリはすでに "extern C"ラッパーを使用しているため、エクスポートされたシンボルは期待通りにうまくいきます。 Haskellのバインディングを作るために、バンドルから.hファイル共有の.soライブラリ

  • 使用ヘッダーを作るために

    1. ダウンロードC++バンドルグラムと
    2. コンパイル++:

      まとめるために、私は次の解決策を提案します

    3. の.soライブラリに対してリンクHaskellコード
  • +0

    に私はこのCOMANDでコンパイルしました:G ++ -shared -fPIC -o libpdf.so libpdf.aそしてパンを得ましたdiff /リンクエラー:dist/build/hello/hello-tmp/Main.o:関数 's4lT_info ': (.text + 0x2fd):未定義の' PDF_delete'への参照... –

    +0

    Thx、それは働いた。 g ++ -shared -fPIC -g -o libpdf.so -Wl、全アーカイブlibpdf.a -Wl、-not-whole-archive –

    関連する問題