問題タブ [boost-python]

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 投票する
3 に答える
3126 参照

c++ - Linux の C++ で boost-python を使用する

私の開発ショップは、非常に便利な Python ベースのテスト スイートをまとめました。これを使用して、Linux ベースの C++ コードをテストしたいと考えています。Boostに同梱されているテストプロジェクトをコンパイルして入手しました(ディレクトリに「bjam」と入力すると動作します)が、実際のプロジェクトに問題があります。

ソース (v1.35.0) からブースト ライブラリと bjam をビルドします。bjam を実行すると、bin/gcc-4.1.2/debug ディレクトリに .so が作成されます。Python を実行して「インポート」すると、次のようになります: ImportError: libboost_python-gcc41-d-1_35.so.1.35.0: cannot open shared object file: No such file or directory

ライブラリディレクトリを見ると、次のものがあります。 libboost_python-gcc41-mt-1_35.so libboost_python-gcc41-mt-1_35.so.1.35.0 libboost_python-gcc41-mt.so

明らかに、-mt ライブラリの代わりに -d が必要です。または、-d の代わりに -mt ライブラリを指す必要がありますが、Jamroot ファイルでそれを行う方法がわかりません。

Debian Etch のバージョンのライブラリをインストールすると、「/usr/include に Jamfile がありません」というメッセージが表示され、システム レベルの jamfile が省略されているという debian のバグがあります。

ソースから動作するようになることを期待しているので、ライブラリの問題を解決するための提案があれば、聞いてみたい.

回答 1 への回答: ヒントをありがとう。では、代わりに MT ライブラリを使用するにはどうすればよいか知っていますか? フラグが見つからないにもかかわらず、デバッグモードにいると思って使用している bjam または Jamfile に問題があるようです。GCC の呼び出しに特定のライブラリを含める方法は知っていますが、Boost 側からそれを構成する方法がわかりません。

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

c++ - CPP に埋め込まれた Python: データを CPP に戻す方法

C++ プロジェクトに取り組んでいるときに、自分の本業ではないサード パーティのライブラリを探していました。必要なことを正確に実行する、非常に優れたライブラリを見つけましたが、それは Python で書かれています。Boost.Python ライブラリを使用して、Python コードを C++ に埋め込む実験を行うことにしました。

C++ コードは次のようになります。

Python コードの (非常に) 単純化されたバージョンは次のようになります。

問題は次のとおりです。「MyFunc」は正常に実行され、「結果」の出力が表示されます。私ができないことは、C++ コードから「結果」を読み取ることです。抽出コマンドは、どの名前空間でも「結果」を見つけることはありません。「結果」をグローバルとして定義しようとしましたが、タプルを返そうとしましたが、動作させることができません。

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

c++ - 抽象C++クラスから派生したクラスのpythonオブジェクトインスタンスを作成するには?

これは私のコードです:

C++ 抽象クラスから派生した Python クラスを作成し、このオブジェクトを C++ に戻したいと考えています。クラッシュせずにそれを行うにはどうすればよいですか?

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

python - ラップされた C++ 関数の Python で配列へのポインターを渡す方法

私は C++/Python 混合言語プログラミングに不慣れで、Python/C API についてあまり知りません。Boost.Python を使用して、Python 用の C++ ライブラリをラップし始めました。配列へのポインタを引数として取る関数のラップに行き詰まっています。以下 (2 番目の ctor) は C++ でのプロトタイプです。

このようにboost::pythonでラップすることで、私は正しくやっていますか?

コンパイルとリンクは成功しましたが、Python で呼び出す方法がわかりませんでした。次のような私の素朴な試みは失敗しました。

2 番目の質問は、デストラクタもラップする必要があるかということです。場合によってはこれが必要になるかどうかを指定してください。ただし、常にではありません。

0 投票する
6 に答える
2265 参照

c++ - Boost::Python でカスタムの暗黙的な変換を C++ 型に追加するには?

私の C++ コードには、Bar 型の変数を引数として取る多くのメソッドを持つクラス Foo があります。

Bar には、int、std::string、float などの多くの一般的な型から新しいオブジェクトを作成するコンストラクタがいくつかあります。

これを Boost::Python でラップし、暗黙的に Bar オブジェクトに変換されるため、Python リテラルを直接使用して Foo メソッドを呼び出すことができるようになりました。

ここで、次のように、タプルなどの他の Python タイプも使用できるようにしたいと考えています。

しかし、元の Bar 定義には触れたくありません。また、私の C++ ライブラリを Boost::Python のもので汚したくありません。バインディング コードにラッパー関数を記述したいのですが、これが可能かどうか、およびこれを行う正しい方法がわかりません。

つまり、Python で自動変換として使用するファクトリ関数を登録できますか?

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

c++ - Boost.Python で演算子をオーバーロードする方法

Boost.Python を使用して C++ クラスの演算子をオーバーロードしようとしています。

thisによると、私は正しい方法でやっています...しかし、コンパイルエラーがたくさんあります。

問題を特定するために作成した簡単な例を次に示します。

コンパイラ エラーは次のとおりです。

ここで何か不足していますか?

ありがとう

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

python - boost python から C++ 配列 (ポインタ) を返す

私は現在、作業中の C++ ライブラリの Python バインディングを作成しています。ライブラリはいくつかのバイナリ ファイル形式を読み取りますが、読み取り速度は非常に重要です。ライブラリの速度を最適化しているときに、std::vector (私が読んでいるインスタンスで使用) が多くの処理時間を消費していることに気付きました。良い/賢明なことはおそらく別の質問です)。

今、これらの配列へのPythonアクセスを許可する方法の問題に悩まされています。boost::python に組み込まれているソリューションはないようです (少なくとも 1 つを見つけることができませんでした)。

状況を説明するコード例:

Pythonがアクセスしたいときはいつでも、配列からboost::python::listを構築するラッパー関数を使用できると思います。私はboost::pythonにまったく慣れていないので、ハッキングを始める前に、この問題に対する優れた標準または組み込みの解決策があるかどうかを尋ねる必要があると考えました。

では、 boost::python を使用してInstanceの配列をどのようにラップすることをお勧めしますか?data

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

c++ - Python例外テキストを取得する方法

C++アプリケーションにPythonを埋め込みたい。私はBoostライブラリを使用しています-素晴らしいツールです。しかし、私には1つの問題があります。

Python関数が例外をスローした場合、それをキャッチしてアプリケーションでエラーを出力するか、エラーの原因となったPythonスクリプトの行番号などの詳細情報を取得します。

どうすればいいですか?PythonAPIまたはBoostで詳細な例外情報を取得するための関数が見つかりません。

PyErr_Print()は、エラーテキストをstderrに出力し、エラーをクリアするだけなので、解決できません。