問題タブ [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.
python - Swig / Python のメモリ リークが検出されました
SWIG で Python ラッパーを作成しようとしている非常に複雑なクラスがあります。ただし、Python でアイテムのインスタンスを作成すると、メッセージを受信せずに特定のデータ メンバーを初期化できません。
これに対処するために私が何をする必要があるか知っている人はいますか? デストラクタを生成するために使用できるフラグはありますか?
c++ - swig、C++、および Ruby を使用した std::istream との $stdin の互換性
入力として std::istream を受け取る C++ の関数があります。
SWIG を使用して Ruby にバインドしましたが、Ruby の $stdin 変数は C++ のストリーム クラスなどとは根本的に異なるため、次のいずれかの方法がわかりません。1) C++ クラスを Ruby に公開する方法$stdin を使用できます。または 2) $stdin を C++ クラスが理解できるものに変換します。
C++ の iostream を Ruby にバインドした経験のある人はいますか?
ありがとう。
lua - スウィッグラップされた変数の基本的な割り当てが失敗する
swigを使用して、非常に多くのラップされたC++クラスを含むluaモジュールを作成しました。ラッパーは問題なく生成およびコンパイルされます(-Wallを使用)。しかし、私が見つけたいくつかの場所で、次の問題が発生しました。メンバーデータの基本的な割り当てが失敗します。
私が実行した場合:
次に、「a」にアタッチされたメタテーブルにすべてのメンバーデータが含まれていることを確認できます(この場合、クラスタイプClassBとClassCのフィールド「b」と「c」)。
私はさらに行うことができます:
これにより、bがClassB()の新しいインスタンスに正常に再割り当てされます。しかし、私がやろうとすると:
エラーメッセージが表示されます:
'='の右側の式は、再割り当てされるデータフィールドを含む要素と同じタイプのオブジェクトであるかのように。何か簡単なものが欠けているに違いないと思いますが、壁に頭をぶつけて数時間も無駄になっています。
誰か考えがありますか?ありがとう!
lua - 派生クラスに型キャストをスウィッグしますか?
Swigは、オブジェクトを親クラスに型キャストできるようにするための関数のホスト全体を提供していることに気付きました。ただし、C ++では、次のような関数を生成できます。
ここで、「A」はクラス「B」と「C」の親です。次に、次のように都合のよいときに、返されたポインタを「B」タイプまたは「C」タイプに型キャストできます。
実行時にジェネリックポインター生成関数から受け取ったオブジェクトを、ラッパーを使用してスクリプト言語で型キャストできる方法はありますか?(私の場合、Lua?)私は約100の可能なクラスの1つを生成できる関数を持っているので、C++で維持しなければならない巨大なスイッチ構造を記述したくありません。ジェネリックポインターを受け取った時点で、キャスト先のデータ型の文字列表現もあります。
何かご意見は?ありがとう!
- 編集 -
SWIGが、すべてのクラスのコピーコンストラクターを生成することを提案していることに気付きました。それらを生成させた場合、次のようなことを行うことができますか?:
そして、varは、継承クラスのインスタンスであることを認識している継承クラスのインスタンスになりますか?
c - SWIGを使用してCでPerlハッシュを作成するにはどうすればよいですか?
Cライブラリ内からPerlハッシュを作成しようとしています。これが私がこれまでに得たものです:
試してみる:私には意味のあるものが何もありません:
アイデア?
python - 実行可能ファイルではなく共有ライブラリ shim を作成しているときに、stat へのサードパーティの共有ライブラリ参照を満たすにはどうすればよいですか?
私は、swig と setup.py スクリプトの組み合わせを使用して作成された共有ライブラリ shim を介して、一連のサードパーティ共有 C ライブラリを使用する社内 Python システムの新しいメンテナーです。これは最近までうまく機能していました。
サードパーティの共有 C ライブラリは新しい機能のために更新され、クリーン ビルド後にメインの Python プログラム (生成された共有ライブラリ shim をインポートする) を実行しようとすると、次の実行時エラーが発生します。
-sh-3.00$ python ams.py
私は 1999 年のディスカッション スレッドを見つけました。これは、stat が libc.so.6 ではなく libc_nonshared.a に存在することが問題であることを説明し、解決策を提供します: ビルドに -lc を追加して、c ライブラリにリンクします。コマンドライン。
setup.py スクリプトのライブラリのリストに「c」を追加しましたが、結果は変わりません。これは、実行可能ファイルではなく共有ライブラリ shim を作成しているためだと思われます。
ビルド環境が与えられた場合、サードパーティの共有ライブラリの stat への参照を満たすにはどうすればよいですか?
私のビルドシステムは次のとおりです。
-sh-3.00$ lsb_release -a
私のgccバージョンは次のとおりです。
-sh-3.00$ gcc --version
私のPythonのバージョンは次のとおりです。
-sh-3.00$ python -V
java - Java を使用した Swig c++ は、ポリモーフィック コールバック関数で型を失います
質問: Java コールバック関数に渡されると、C++ のスウィッグ オブジェクトの型が失われるのはなぜですか?
セットアップ: コールバックを行うための Swig Java の例を取り上げ、コールバックに渡すオブジェクトを追加しましたrun(Parent p)
。コールバックは期待どおりに機能しますが、オブジェクトを渡すと、Java はその型を失い、そうあるべきときにChild
その型を認識しているようです。これは、 Swig Java コールバックの例に基づいています。Parent
Child
システム情報: Swig 1.3.33 を搭載した Ubuntu 8.04 - 万が一、最新の Swig が違いを生んだ場合、1.3.39 もテストしましたが、効果はありませんでした。
出力:
出力でわかるように、オブジェクトは実際には Child 型ですが、その Java クラス名は Parent です。これは間違っています...
Java コールバックrun(Parent p)
を見ると、Java クラスを取得している場所がわかります。Java は実際にこのオブジェクトが型であると認識しています。Parent
これを Child にキャストしようとするとClassCastException
、期待どおりにスローされます。
コード:
これは Swig のバグかもしれませんが、これが私の C++ 型/キャストの愚かさであることを願っています...
どんな考えでも大歓迎です!
c++ - C++へのLuaバインディングとガベージコレクション
わかりました、これが私が抱えている問題です。
レンダリングシーンへのポインターの独自の追跡を維持し、それらを管理する内部レンダリングマネージャーを備えたレンダリングエンジンへのLuaバインディングがあります。問題は、Luaから使用しているときに、C ++レンダーマネージャーに追加するすべてのオブジェクトへのLua参照を保持しないと、ポインターのガベージコレクションが開始され、もちろんクラッシュが発生することです。私が作成するすべてのものへのすべての参照を保存する必要は特にありません。Luaに特定のものをガベージコレクションしないように強制する方法はありますか?この問題を回避する他の方法はありますか?
SWIGでLuaバインディングを生成しています。
java - Windows Vista で Java JNI EXCEPTION_ACCESS_VIOLATION エラーを診断する方法
JNI を介していくつかの C++ ライブラリを使用する Java アプリケーションがあります。アプリケーションは Windows XP では正常に動作していましたが、Windows Vista では動作せず、JVM がすぐにクラッシュします。
また、C++ ライブラリを作成し、SWIG を使用して JNI バインディングを作成しました。
問題を解決する方法をどこから探し始めればよいか、私たちは少し無知です。
得られる EXCEPTION_ACCESS_VIOLATION は次のとおりです。