問題タブ [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++ - コードジェネレーターをユニットテストするにはどうすればよいですか?
これは私が知っている難しい自由形式の質問ですが、私はそれを床に投げて、誰かが何か面白い提案があるかどうかを確認したいと思いました。
PythonインターフェイスをC++コード(SWIGを介して生成)に変換し、これをWebServicesとして公開するために必要なコードを生成するコードジェネレーターを開発しました。このコードを開発したとき、TDDを使用して開発しましたが、テストが非常に脆弱であることがわかりました。各テストは基本的に、特定の入力コード(C ++ヘッダー)に対して特定の出力コードを取得することを確認する必要があるため、XML入力ファイルからテスト定義を読み取り、テストを生成する小さなエンジンを作成しました。これらの期待からのケース。
問題は、コードを変更することを恐れていることです。それと、ユニットテスト自体がa:複雑で、b:もろいという事実。
だから私はこの問題への代替アプローチを考えようとしています、そしてそれは私がおそらくそれを間違った方法で取り組んでいることに気づきます。たぶん私は結果にもっと焦点を合わせる必要があります、IE:私が生成したコードは実際に実行され、私が望むように見えるのではなく、私が望むことをしますか?
誰かがこれに似た何かの経験を共有したいと思ったことはありますか?
python - コンパイル前の Python コードによるプロトタイピング
私はしばらくの間、ピーク フィッティング ライブラリの作成について熟考してきました。私は Python をかなりよく知っており、最初はすべてを Python で実装する予定ですが、最終的にはコンパイル済み言語でいくつかのコア ルーチンを再実装する必要があるかもしれないと考えています。
IIRC は、Python の元の任務の 1 つで、プロトタイピング言語でした。ただし、Python は、関数、ファンクター、オブジェクトを関数やメソッドに渡すことを許可する点でかなり自由ですが、C や Fortran については同じことが当てはまらないのではないかと思います。
コンパイルされた言語にインターフェースする必要があると予想される関数/クラスの設計について何を知っておくべきですか? また、これらの潜在的な問題のうち、cTypes、bgen、 SWIG、Boost.Python、Cython、Python SIPなどのライブラリによってどの程度対処されているのでしょうか?
この特定のユース ケース (フィッティング ライブラリ) では、ユーザーが数学関数 (Guassian、Lorentzian など) を Python 関数として定義し、コンパイルされたコード フィッティング ライブラリによって解釈されて渡されるようにすることを想像します。配列の受け渡しも不可欠です。
c# - C# で SWIG を使用する場合のベスト プラクティスは何ですか?
C# でSWIGライブラリを使用した人はいますか? 持っている場合、どのような落とし穴を見つけましたか?また、ライブラリを使用する最善の方法は何ですか? C で記述されたプログラムのラッパーとして使用することを考えており、.NET アプリケーションで使用できるヘッダー ファイルをラップしたいと考えています。
編集:ターゲットOSのいくつかの明確化。Linux と Windows でアプリケーションを実行する予定であるため、SWIG を調べています。P/Invoke はオプションではありません。
python - Python:SWIGとctypes
Pythonでは、共有ライブラリのエントリポイントを呼び出すために、どのような状況でSWIGがctypesよりも優れた選択肢ですか?SWIGインターフェイスファイルがまだない場合を考えてみましょう。
2つのパフォーマンスメトリックは何ですか?
c++ - SWIG を使用して Perl から C++ ライブラリを呼び出すとクラッシュする (AIX 5.1)
AIX 5.1 マシンで Perl から C++ ライブラリーを呼び出そうとしています。これを実行するために、非常に単純なテスト プロジェクトを作成しました。
私の C++ 共有ライブラリ ( test.cpp
):
私の SWIG インターフェイス ファイル ( test.i
):
次に、共有オブジェクトを次のように構築します。
この時点で、test.so
Perl で (生成された 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 リンカー フラグが不足している可能性があると思います。xlc
ld
ld
Edit2:わかりました、私はそれを機能させました。AIX は、リンクに関しては非常に脆弱です。最終的に、正しく機能しているように見える次のリンク コマンドを思いつきました。
私がリンクしたライブラリは最も関連性があります。ライブラリが言及される順序も非常に重要であることがわかりました(うーん)。また、これは AIX 5.1 に同梱されている Perl 5.6.0 に対してビルドされていることにも注意してください。Perl 5.8.8 に対して同じ単純なアプリケーションを構築しようとしましたが、うまくいきません。ただし、(直接呼び出す代わりにストレートgcc
/を使用する) はるかに健全なリンク方法の方が適切に機能するように思われます。したがって、この問題は Perl ディストリビューションまたはリンカなどのバグのようです。xlc
ld
願わくば、これが AIX で作業しなければならないことで呪われた哀れな魂の助けになることを願っています...
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ファイルと同じくらい簡単だったら:(
これは完全を期すためのスタック トレースです。
java - 新しいものを作成するときに既存の SWIG ラッパーを参照する
ネイティブ C++ ライブラリ (PhysX) の Java ラッパーである既存のライブラリ (JPhysX) があります。Java ライブラリは、C++ コード内のオブジェクト
へのポインタを表すなど、SWIG によって生成された型を使用します。com.jphysx.SWIGTYPE_p_NxStream
NxStream
ここで、C++ type から継承する独自の C++ クラスを作成し、NxStream
クラスの Java ラッパーも wrapper から継承したいと考えています
。com.jphysx.SWIGTYPE_p_NxStream
問題は、自分のクラスのラッパーを生成するために SWIG を呼び出すと
、 と呼ばれる新しいラッパーも作成されることです。このラッパーは、 のラッパーと機能的には同じですが、SWIGTYPE_p_NxStream
Java に関する限り、タイプが異なります。com.jphysx
この既存のラッパーを再利用して、代わりにcom.jphysx
クラスのラッパーを継承させるように SWIG を説得するにはどうすればよいですか?com.jphysx.SWIGTYPE_p_NxStream
c++ - C++APIをPythonに公開する
私は現在プロジェクトに取り組んでおり、プログラムをスクリプト化できるようにするには、C++クラスをPythonでラップする必要がありました。したがって、私の特定の経験には、Pythonインタープリターをプログラムに埋め込むことも含まれていました。
私が試した代替案は次のとおりです。
Boost.Python
Boost.Pythonによって生成されたよりクリーンなAPIが好きでしたが、ユーザーが追加の依存関係をインストールする必要があるという事実により、SWIGに切り替えました。
SWIG
SWIGの主な利点は、最終的なプログラムを使用するためにエンドユーザーがSWIGをインストールする必要がないことです。
あなたはこれを行うために何を使用しましたか、そしてそれであなたの経験は何でしたか?
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でコンパイルするときに生成される警告は次のとおりです。
c# - boost::signal を C# デリゲートにラップする
ネイティブ C++ で記述された、次のようなインターフェイスを持つ非同期ライブラリがあるとします。
C#でラップしたい。SWIG などを使用して、シグナルを C# デリゲートにバインドできる方法を知っている人はいますか?