問題タブ [c2hs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
301 参照

haskell - Windowsでのc2hsの使用

私はWindowsでlibxml-enumeratorパッケージを使用しようとしていますが、これは(最終的には)c2hsを使用する必要があります。関連するパッケージをビルドしようとすると、c2hsから一見悪名高い「存在しない」エラーが発生します。これはGCCがインストールされていないことに関連しているようですが、Haskellのgcc.exeのコピーをパスに追加したため、これは奇妙なリストのようです。

誰かがこのバグを打ち負かす方法を知っていますか?

0 投票する
2 に答える
3557 参照

haskell - hsc2hs と c2hs の違いは?

hsc2hs と c2hs の違いは何ですか?

hsc2hs がプリプロセッサであることは知っていますが、正確には何をするのでしょうか?

また、c2hs は C コードから Haskell モジュールを作成できますが、これには hsc2hs が必要ですか?

0 投票する
2 に答える
407 参照

haskell - c2hsが正しくインストール/登録されていない

を実行するcabal install c2hsと、正しく終了しているように見えますが、パッケージが登録されていません。パッケージはインストールされていないように見えます。に表示されずghc-pkg list、再cabal install c2hs実行は「要求されたすべてのパッケージがすでにインストールされています」と言う代わりに、同じインストール手順を実行します。

これを立ち上げて実行するのに助けていただければ幸いです。ビルド済みのGHC7.4.1バイナリを使用しています。

前もって感謝します!

0 投票する
1 に答える
315 参照

haskell - C2HS マーシャリング関数にアクセスする最新の方法は何ですか?

cFromEnum関数を使用したいのですがC2HS、これはモジュールにあり、不要であり、アンパック/インストールしないでください( c2hs が正しくインストール/登録されていません)。列挙型を変換する最新の方法は何ですか? 具体的には、これが私のコードです。

get_nodes_by_type最終的には引数を取ります。私は今のところ何かを機能させようとしています)。

0 投票する
1 に答える
168 参照

haskell - c2hs-匿名の列挙型?

c2hsリファレンス(別名「チュートリアル」)は、オプションではないパラメーターとしてC列挙型の名前に言及しています。匿名の列挙型で動作させる方法はありますか?生成する列挙型の決定は、単一の列挙型メンバーがあれば可能である必要があります。それが不可能な場合でも、少なくともそのメンバーに明示的に名前を付けることで列挙型を生成できるはずです。

明確にするために:

列挙型が与えられた

の線に沿って何かが欲しいのですが

0 投票する
1 に答える
504 参照

haskell - 「外部」ポインターを使用して C2HS を動作させることができません

一般情報

私は現在、C->Haskell (C2HS) Interface Generator for Haskell を試しています。一見しただけで、それは素晴らしかったです。かなり複雑な C++ ライブラリを (小さなextern C-wrapper を使用して) わずか 2 時間でインターフェイスしました。(そして、私は以前にFFIをしたことがありません。)

1 つだけ問題がありました。C/C++ ライブラリに割り当てられたメモリを解放するにはどうすればよいでしょうか。私{#pointer ... foreign #}C2HSのドキュメントで見つけましたが、それは私が求めているものとまったく同じように見えます. 私の C-wrapper は C++ ライブラリを機能的なインターフェースを備えた参照透過性を備えたライブラリに変換するので、Haskell Storage Manager は私のために大変な作業を行うことができるはずです :-)。残念ながら、私はこれを機能させることができませんでした。私の問題をよりよく説明するために、C/C++ ライブラリ + ラッパーと同じプロパティを持つがオーバーヘッドのない小さなデモ プロジェクトを GitHubにセットアップしました。ご覧のとおり、このライブラリはpure unsafeFFI で使用しても完全に安全です。

デモプロジェクト

GitHub で、次のような構成の小さなデモ プロジェクトを作成しました。

C ライブラリ

C ライブラリは非常に単純で役に立ちません: 整数を渡すことができ[0..n]、ライブラリから整数 (現在のところ) を返すことができます。覚えておいてください: ライブラリは役に立たず、ただのデモです。インターフェイスも非常に単純です。この関数LTIData lti_new_data(int n)は (整数を渡した後)、C ライブラリの割り当てられたデータを含むある種の不透明なオブジェクトを返します。ライブラリには 2 つのアクセサ関数int lti_element_count(LTIData data)ともint lti_get_element(LTIData data, int n)あり、前者は要素の数を返し、後者は要素を返しますn。ああ、最後になりましたが、ライブラリのユーザーは、ライブラリを使用した後、 を使用して不透明を解放する必要がありLTIDataますvoid lti_free_data(LTIData data)

低レベルの Haskell バインディング

低レベルの Haskell Binding は、C2HS を使用してセットアップされます。

高レベル Haskell API

また、お楽しみとして、低レベル API バインディングを使用する一種の高レベル Haskell APIと、高レベル API を使用する単純なドライバー プログラムもセットアップしました。ドライバ プログラムと valgrind などを使用すると、リークしたメモリを簡単に確認できます (p_1, p_2, ..., p_nライブラリが\sum_{i = 1..n} 1 + p_i割り当てを行うすべてのパラメータについて、以下のように簡単に確認できます)。

デモの現状

次のように入力するだけで、プロジェクトを複製、コンパイル、実行できるはずです。git clone https://github.com/weissi/c2hs-experiments.git && cd c2hs-experiments && cabal configure && cabal build && dist/build/TestHsLTI/TestHsLTI

では、問題は何ですか?

問題は、プロジェクトがC2HS を使用Foreign.Ptrする「管理された」バージョンのみを使用し、それを機能させることができないことです。デモ プロジェクトでは、これらの外部ポインタを使用しようとするファイルも追加しましたが、機能しません :-(。一生懸命試しましたが、成功しませんでした。Foreign.ForeignPtr{#pointer ... foreign #}.chs

また、私が理解できないことが 1 つあります。それは、C2HS を使用して GHC にライブラリのデータを解放する方法を伝える方法です。デモ プロジェクトのライブラリにはvoid lti_free_data(LTIData data)、メモリを解放するために呼び出される関数が用意されています。しかし、GHCはそれを推測することはできません!?! GHC が通常の a を使用する場合free()、すべてのメモリが解放されるわけではありません :-(.

0 投票する
1 に答える
735 参照

haskell - char* 型の引数を持つ外部関数に NULL を渡すにはどうすればよいですか?

一部の C プロジェクトへの Haskell バインディングを作成していますが、次の型の関数があります。

問題は、fooこのポインターのNULL値をチェックし、通常の動作とは異なることを行うことです。私の Haskell ソース ラッパーでは、この関数の型と内部をfoo :: String -> IO ()使用して引数をマーシャリングしています。newCString

どうすればユーザー能力パスをNULLそこに与えることができるのだろうか? 以来、それがnewCString ""私に与えることを期待していましたが、そうではありません。0"" /= "\0"

今のところ私が見る唯一の方法は、ユーザーが望んNULLでいる指標として "" を使用することですが、それはハックのようです。この問題は非常に一般的であると予想していますが、SOに関する質問は見つかりませんでした。

0 投票する
2 に答える
224 参照

haskell - Mac OS X 10.7.5 での c2hs インストール エラー

でc2hsをインストールしようとしていcabal install c2hsます。~/.cabal/bin事前にバイナリをインストールするように作成しました。

コマンドcabal install c2hsでエラーを取得します。

インストールの何が問題になっていますか? ghc のバージョンは 7.6.3 です。

0 投票する
1 に答える
263 参照

haskell - c2hs を使用して void* をマーシャリングする

私のC関数は次のようになります。

私の.chsファイルは次のようになります。

これは私が得るエラーです:

Ptr ()c2hs のドキュメントにvoid ポインター ( ) に関する言及が見つかりません。これをマーシャリングするにはどうすればよいですか?