問題タブ [swig]
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.
c - SWIG で C から Ruby ブロックを使用する
Ruby で C インターフェイスをラップするために SWIG を使用しています。与えられた 2 つの構造体
#each
Ruby で処理できるように、現在の頂点を生成するメソッドを作成するにはどうすればよいですか。現在、私のSWIGインターフェースファイルには次のようなものが含まれています
よろしくお願いします。
--t6d
swig - AIX で SWIG がクラッシュする (Python と、おそらくすべての SWIG サポートを使用)
SWIG は AIX で簡単にコンパイルおよびインストールできます。残念ながら、単純なSWIG hello world (これもコンパイルされますが、それほど簡単ではありません) は、Segmentation Fault または Illegal Instruction (コンパイル/リンカー プロセスの詳細によって異なります) でクラッシュします。これは、gcc と xlc (IBM c コンパイラー) の両方で発生します。同音異義語の GNU ld がシステムにインストールされていなかったため、ネイティブ AIX リンカー ld のみを試しました。
ファイル: example.c
ファイル: example.i
Makefile スニペット:
リンカーのステップが問題です。チュートリアルの例に従う場合は、次のことを行う必要があります。
残念ながら、これはいくつかの理由で機能しません。IBM/AIX とオープン ソース コミュニティは、「共有ライブラリ」が何を意味するかについて、まったく異なる考えを持っていると思います。AIX ネイティブ リンカーから取得する最も一般的な共有オブジェクト (つまり) には、シンボルがまったく含まれていません (実際、サイズは 1kB 未満です)。また、リンカから壊れた出力を取得することも非常に簡単です (そのような場合、リンク中に次のような未解決のシンボルの非常に長いリストが表示されます)。
やるべきことをやっていると-berok
、解決策がさまざまなリンカーオプションをハッキングしていることは明らかです. 実際、空でない .so ライブラリを作成するいくつかの組み合わせを、エラーを生成せずに見つけることができます。これらの組み合わせの 1 つが上記の Makefile スニペットで報告されています (他にもあります)。残念ながら、それらはすべて次の 2 つのモードのいずれかで失敗します。-bnoentry
-bexpall
-brtl
-bshared
-bM:SRE
-bexpfull
また
gcc を使用するか、別のバージョンの python (私たちは 7 を持っています!) を使用しても、32 ビットでも 64 ビットでも何も変わりません。「適切な」リンク オプションを見つけることはできますが、実行時にクラッシュします。これを解決するには?
c++ - swig (または Boost::Python) のメンバーへのポインター
Python 用の C++ アプリからいくつかのバインディングを作成しました。
問題は、メンバーへのポインターを使用することです (最短パスを計算し、パラメーターとして最小化するプロパティを与えるためです)。
これは C++ の署名です。
これは私がやったことです(私がドキュメントで理解したことから):
これは、Python から関数を呼び出す方法です。
そして、これは私が得るエラーです:
デフォルトの 4 番目のパラメーターを使用するオーバーロードされたメソッドがあり、完全に機能します。
swigでメンバーへのポインタを使用することは可能ですか? はいの場合、トリックは何ですか?いいえの場合、最もエレガントな方法は何ですか?
ご協力ありがとうございました!
更新: Boost::python が確実にそれを行うかどうかを誰かが知っていれば、それに切り替えます。
lua - Swig と Lua: Lua ファイルを FILE* にマップする方法
引数として取る C 関数がありFILE*
、Lua ファイルを渡してこの関数を Lua で使用したいと考えています。これには が必要だと思い%typemap
ます。書き方は?(Luaの学習を始めたばかりです)。
python - 両方がレンダリングしたいPythonバインディングを持つCライブラリ
Pythonでいくつかの流体力学をスケッチしています。しばらくして、もう少し速度を求めているので、実際のロジックをCで書き直し、Pythonバインディングをいくつか作成しました(SWIGを使用)。
今の私の問題は、それを良い方法でレンダリングする方法がないことです。ロジックはピクセルごとに実行されるため、ピクセルを追跡してレンダリングしたいと思います。
を受け入れるClibで関数を作成しようとすると、PythonでTypeErrorSDL_Surface*
が発生します。おそらく、PyGameがそれをSDLに直接簡単にマッピングしたと考えるのは少しナイーブでした。また、Pythonは、Clibs"init"に。を返すようにした場合の対処方法がわからないようですSDL_Surface*
。
これを行うための良い方法は何ですか?C lib内のすべてをレンダリングするだけであれば、問題はありません。しかし、私はそこにいくつかのGUIを配置したいと思います(Pythonを使用)。C libは、どのピクセルが「ダーティ」であるかをすでに追跡しています。そのリストを公開してPythonにループさせ、ダーティピクセルごとに関数を呼び出す必要がありますか?この種の巨大なループが、アプリの一部をCで書き直したかった正確な理由であるため、悪いようです。
そして、誰かがそれを提案する前に、boost.pythonは今インストールするのが少し重いので(私はWindowsを使用しているので)、私は今のところSWIGに固執します(誰かが「ちょうど」ブーストをインストールする賢い方法を持っていない限り) .python?)。
ここで銀の弾丸を期待しています。SDLを実行してClibを作成し、Pythonとレンダリングターゲットを共有してPyGameを実行するにはどうすればよいですか?
c++ - SWIG を使用して C++ で使用する Lua オブジェクトをラップする
現在、C++ オブジェクトをインスタンス化し、Lua で SWIG バインディングを使用して渡す方法を知っています。必要なのはその逆です。
Lua & C++ & SWIG を使用しています。
私は C++ のインターフェースと lua のオブジェクトを持っています。これらは同じ仕事をし、同じ構造を持つメソッドを実装しています。これらのオブジェクトを lua でインスタンス化できるようにしたいのですが、似ているインターフェイスへのポインターを使用して C++ で渡すことができます。
そのため、上記の lua オブジェクトのハンドラーとして機能するインターフェイスの C++ 実装を作成することは想像できますが、これを行う方法はわかりません。このクラスは、C++ の世界で lua オブジェクトの代表またはプロキシとして機能します。
明確にするために、私が尋ねた同様の質問への回答で使用されている次のコード例から始めます。
C++ コード:
ルアコード:
ここで、Bank という C++ のクラスがあるとします。
ここで欲しいのは、lua で次のことを行うためのメカニズムです。
プロキシとして機能する C++ クラスをインスタンス化し、すべての lua 関数を含む lua テーブルに渡すなど、追加の手順を実行する必要がある場合は、次のようになると想像できます。
C++ コード:
ルアコード:
ここでの問題は、ProxyAccount クラスをどのように実装するか、または settable の関数シグネチャがどのように見えるかさえわからないことです...
python - gtkglext にリンクすると SWIG が Python をクラッシュさせるのはなぜですか?
SWIG を使用して gtkglext にリンクすると、終了時に Python がクラッシュします。なぜこれがクラッシュするのですか?
test.i:
セッション:
何か案は?ありがとう...
c++ - C++ から Lua テーブルの関数を呼び出す
たとえば、Luaテーブル/オブジェクトがあります。
そして、この Lua テーブルにはchew
、パラメーターを受け取る という名前の関数が含まれています。
私はSWIGも使用しており、たとえばクラスがありCPerson
ます:
Lua からこのオブジェクトのインスタンスを取得できます。
私ができるようにする必要があるのは、次の Lua コードです。
パラメータを渡して、テーブル内の関数person:eat
を呼び出す場所。chew
bannana
は C++ で実装されているため、クラスにすでに Lua 状態ポインターがあると仮定して、CPerson
実装するにはどのような変更が必要ですか?Eat()
CPerson
Edit1: C++ クラスを Lua にバインドする方法を知りたくありません。これを行うための SWIG が既にあります。Lua テーブル内で C++ から Lua 関数を呼び出す方法を知りたいです。
Edit2:CPerson
クラスとbannana
テーブルはどちらも一般的な例です。クラスにはすでに LuaState ポインター/参照があり、メソッドの関数シグネチャは回答者が変更できると想定できCPerson
ますEat
。