回帰と単体テストを実行するために Python にエクスポートしたい C++ で記述された dll があります (Python で回帰を維持して実行する方が簡単です)。この目的のために、Boost.Python を使用して dll のメイン API をエクスポートし、Python で使用できるようにします。私のアセンブリは次のようになります。
- MyLibrary.dll //メイン API C++ ライブラリ
- MyLibrary.pyd //エクスポート定義のみを含むシン dll プロジェクト
BOOST_PYTHON_MODULE
(MyLibrary.dll に依存) - ... //MyLibrary.dll が依存する他の C++ dll ファイル
MyLibrary.pyd をリンクするのに苦労しましたが、質問を少し掘り下げた後 (例:ここb2.exe
) 、特定の Python バージョンを指している間にブーストを再構築する必要があることに気付きました。その後、Pythonからライブラリをインポートして実行することができました(私のマシンだけで)。
技術データ: Windows 7 x64 および MSVC-10.0 でブースト 1.51、Python 3.23 を使用してライブラリを構築しています (自分のプロジェクトは VS2010 から構築されています)。ブーストとのリンクに使用しているバリアントは、共有ライブラリ、64 アドレス モデルであり、それに応じて自分のビルドでリリースされます。
問題は、別のマシンにライブラリ (自分のマシンでビルド) をインポートしようとすると、python が不平を言うことです:
ImportError: DLL load failed: The specified procedure could not be found.
オンラインでimport MyLibrary
これは、次の疑問を投げかけます。
- 私のマシンでビルドした MyLibrary.pyd は「python-portable」ですか? つまり、3.23 (自分のマシンで boost.python をビルドするために使用したバージョン) 以外の Python の他のバージョンでも動作しますか?
- MyLibrary.pyd のユーザーは、正常にインポートできるようにするために、独自のバージョンの Python でブーストを再構築する必要がありますか?
- これまでのところ、BoostPro が提供する Windows 用のビルド済みブースト インストーラーを使用してきました。チーム全体で Python の「正しい」バージョン (BoostPro がリンクされているバージョン) を使用することを決定した場合、ビルドがリンクされている Python のバージョンは何ですか?