問題タブ [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.

0 投票する
8 に答える
7395 参照

c++ - コードジェネレーターをユニットテストするにはどうすればよいですか?

これは私が知っている難しい自由形式の質問ですが、私はそれを床に投げて、誰かが何か面白い提案があるかどうかを確認したいと思いました。

PythonインターフェイスをC++コード(SWIGを介して生成)に変換し、これをWebServicesとして公開するために必要なコードを生成するコードジェネレーターを開発しました。このコードを開発したとき、TDDを使用して開発しましたが、テストが非常に脆弱であることがわかりました。各テストは基本的に、特定の入力コード(C ++ヘッダー)に対して特定の出力コードを取得することを確認する必要があるため、XML入力ファイルからテスト定義を読み取り、テストを生成する小さなエンジンを作成しました。これらの期待からのケース。

問題は、コードを変更することを恐れていることです。それと、ユニットテスト自体がa:複雑で、b:もろいという事実。

だから私はこの問題への代替アプローチを考えようとしています、そしてそれは私がおそらくそれを間違った方法で取り組んでいることに気づきます。たぶん私は結果にもっと焦点を合わせる必要があります、IE:私が生成したコードは実際に実行され、私が望むように見えるのではなく、私が望むことをしますか?

誰かがこれに似た何かの経験を共有したいと思ったことはありますか?

0 投票する
7 に答える
4742 参照

python - コンパイル前の Python コードによるプロトタイピング

私はしばらくの間、ピーク フィッティング ライブラリの作成について熟考してきました。私は Python をかなりよく知っており、最初はすべてを Python で実装する予定ですが、最終的にはコンパイル済み言語でいくつかのコア ルーチンを再実装する必要があるかもしれないと考えています。

IIRC は、Python の元の任務の 1 つで、プロトタイピング言語でした。ただし、Python は、関数、ファンクター、オブジェクトを関数やメソッドに渡すことを許可する点でかなり自由ですが、C や Fortran については同じことが当てはまらないのではないかと思います。

コンパイルされた言語にインターフェースする必要があると予想される関数/クラスの設計について何を知っておくべきですか? また、これらの潜在的な問題のうち、cTypes、bgen、 SWIGBoost.PythonCythonPython SIPなどのライブラリによってどの程度対処されているのでしょうか?

この特定のユース ケース (フィッティング ライブラリ) では、ユーザーが数学関数 (Guassian、Lorentzian など) を Python 関数として定義し、コンパイルされたコード フィッティング ライブラリによって解釈されて渡されるようにすることを想像します。配列の受け渡しも不可欠です。

0 投票する
3 に答える
9312 参照

c# - C# で SWIG を使用する場合のベスト プラクティスは何ですか?

C# でSWIGライブラリを使用した人はいますか? 持っている場合、どのような落とし穴を見つけましたか?また、ライブラリを使用する最善の方法は何ですか? C で記述されたプログラムのラッパーとして使用することを考えており、.NET アプリケーションで使用できるヘッダー ファイルをラップしたいと考えています。

編集:ターゲットOSのいくつかの明確化。

Linux と Windows でアプリケーションを実行する予定であるため、SWIG を調べています。P/Invoke はオプションではありません。

0 投票する
10 に答える
25597 参照

python - Python:SWIGとctypes

Pythonでは、共有ライブラリのエントリポイントを呼び出すために、どのような状況でSWIGがctypesよりも優れた選択肢ですか?SWIGインターフェイスファイルがまだない場合を考えてみましょう。

2つのパフォーマンスメトリックは何ですか?

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

c++ - SWIG を使用して Perl から C++ ライブラリを呼び出すとクラッシュする (AIX 5.1)

AIX 5.1 マシンで Perl から C++ ライブラリーを呼び出そうとしています。これを実行するために、非常に単純なテスト プロジェクトを作成しました。

私の C++ 共有ライブラリ ( test.cpp):

私の SWIG インターフェイス ファイル ( test.i):

次に、共有オブジェクトを次のように構築します。

この時点で、test.soPerl で (生成された SWIG を介してtest.pm) ロード可能な共有オブジェクトができました。共有オブジェクトをロードして、エクスポートしている 1 つの関数を呼び出そうとする非常に単純な perl スクリプトがあります ( test.pl)。

を実行するtest.plと、次の出力が得られます。

myfunc() の
不正な命令 (コアダンプ)

std::coutの使い方をコメントアウトすればmyfunc問題なく動作します。C++ STL で何かを使用するとコア ダンプが発生するように見えます (単に astd::vectorとを宣言しようとしましたstd::stringstreamが、どちらもコア ダンプになります)。STL を使用するスタンドアロンの C++ 実行可能ファイルを問題なく作成できます。問題が発生するのは、perl からロードされたときに共有オブジェクトで呼び出されたときだけです。

gcc ではなく xlc を使用してみましたが、同じ結果が得られます。すべてのリンケージが正しく行われるようにするために渡す必要があるファンキーなリンカ フラグがあると思いますか? どんなアイデアでも大歓迎です...

編集:リンカを直接呼び出す代わりにgcc/を使用してリンクすると ( )、すぐにセグメンテーション違反が発生します。perl が単に共有ライブラリをロードしようとするとクラッシュするようです。上記のように呼び出すことは、動作に最も近いものですが、いくつかのライブラリまたは C++ ライブラリ用の特別な AIX リンカー フラグが不足している可能性があると思います。xlcldld

Edit2:わかりました、私はそれを機能させました。AIX は、リンクに関しては非常に脆弱です。最終的に、正しく機能しているように見える次のリンク コマンドを思いつきました。

私がリンクしたライブラリは最も関連性があります。ライブラリが言及される順序も非常に重要であることがわかりました(うーん)。また、これは AIX 5.1 に同梱されている Perl 5.6.0 に対してビルドされていることにも注意してください。Perl 5.8.8 に対して同じ単純なアプリケーションを構築しようとしましたが、うまくいきません。ただし、(直接呼び出す代わりにストレートgcc/を使用する) はるかに健全なリンク方法の方が適切に機能するように思われます。したがって、この問題は Perl ディストリビューションまたはリンカなどのバグのようです。xlcld

願わくば、これが AIX で作業しなければならないことで呪われた哀れな魂の助けになることを願っています...

0 投票する
4 に答える
2910 参照

python - Python から dll を読み込む

ここで見つけたソースコードからPythonアプリケーションを構築しています

Web を検索していくつかの問題をコンパイルして修正することができましたが、この時点で立ち往生しています。

アプリケーションを実行すると、このメッセージが表示されます。

代替テキスト http://img511.imageshack.us/img511/4481/loadfr0.png

この python アプリは、swig を使用して c/c++ コードにリンクします。

私は VC++2005 Express Edition を持っており、scons と Python 2.5 と共にコンパイルするのに使用していました (そして 2.4 も試しました)。

ロードしようとしているdllは「msvcr80.dll」です。これは、メッセージが「msvcr80.dll」になる前に見つからないか、そのようなものであるため、取得してwindow32フォルダーにドロップしました。

私がここで読んだことについて: http://msdn.microsoft.com/en-us/library/ms235591(VS.80).aspx

解決策は、マニフェストと dll ファイルを使用して MT を実行することです。私はすでにそれを行いましたが、どちらも機能しません。

誰かが私を正しい方向に向けることができますか?

これは、マニフェスト ファイルの内容です。

今、Python 2.6 を試してみますが、問題を理解できるかどうかはよくわかりませんが、Python 2.5 と Python 2.5 の .exe には、.exe ファイル内に文字列 "MSVCR71.dll" が含まれていました。しかし、おそらくこれは何の関係もありません。

ps。すべてがjarファイルと同じくらい簡単だったら:(

これは完全を期すためのスタック トレースです。

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

java - 新しいものを作成するときに既存の SWIG ラッパーを参照する

ネイティブ C++ ライブラリ (PhysX) の Java ラッパーである既存のライブラリ (JPhysX) があります。Java ライブラリは、C++ コード内のオブジェクトcom.jphysx.SWIGTYPE_p_NxStreamへのポインタを表すなど、SWIG によって生成された型を使用します。NxStreamここで、C++ type から継承する独自の C++ クラスを作成し、NxStreamクラスの Java ラッパーも wrapper から継承したいと考えていますcom.jphysx.SWIGTYPE_p_NxStream

問題は、自分のクラスのラッパーを生成するために SWIG を呼び出すとSWIGTYPE_p_NxStream、 と呼ばれる新しいラッパーも作成されることです。このラッパーは、 のラッパーと機能的には同じですが、com.jphysxJava に関する限り、タイプが異なります。

この既存のラッパーを再利用して、代わりにcom.jphysxクラスのラッパーを継承させるように SWIG を説得するにはどうすればよいですか?com.jphysx.SWIGTYPE_p_NxStream

0 投票する
5 に答える
12743 参照

c++ - C++APIをPythonに公開する

私は現在プロジェクトに取り組んでおり、プログラムをスクリプト化できるようにするには、C++クラスをPythonでラップする必要がありました。したがって、私の特定の経験には、Pythonインタープリターをプログラムに埋め込むことも含まれていました。

私が試した代替案は次のとおりです。

  • Boost.Python

    Boost.Pythonによって生成されたよりクリーンなAPIが好きでしたが、ユーザーが追加の依存関係をインストールする必要があるという事実により、SWIGに切り替えました。

  • SWIG

    SWIGの主な利点は、最終的なプログラムを使用するためにエンドユーザーがSWIGをインストールする必要がないことです。

あなたはこれを行うために何を使用しましたか、そしてそれであなたの経験は何でしたか?

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

c++ - std::vectorを公開する方法SWIGを使用してPythonリストとして?

SWIGを使用してこの関数をPythonに公開しようとしています。

そして、SWIGにPythonのラッピングコードを生成させて、整数のリストとして表示できるようにします。

これを.iファイルに追加します。

SWIG Version 1.3.36でswigを実行して呼び出して-Wallいますが、警告は表示されません。

リストにアクセスすることはできますが、生成されたC ++コードを-Wall(使用して)コンパイルすると、次のような警告が表示されます。g++ (GCC) 4.2.4

関数を正しく公開していますか?もしそうなら、警告はどういう意味ですか?


これらは、同じ関数の問題のある行の前の行です。

そして、これは問題のある行です:

その後にさらにコードが続きます。

g++4.2.4でコンパイルするときに生成される警告は次のとおりです。

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

c# - boost::signal を C# デリゲートにラップする

ネイティブ C++ で記述された、次のようなインターフェイスを持つ非同期ライブラリがあるとします。

C#でラップしたい。SWIG などを使用して、シグナルを C# デリゲートにバインドできる方法を知っている人はいますか?