0

VS2010 で boost::python を使用して DLL を構築し、一部の関数を Python モジュールにエクスポートしました。

myDLL.cpp:

std::string greet() { return "hello, world"; }
int square(int number) { return number * number; }

BOOST_PYTHON_MODULE(getting_started1)
{
    // Add regular functions to the module.
    def("greet", greet);
    def("square", square);
}

ここまでは、すべて問題なくコンパイルされます。次に、c:\myDLL\Debug にある myDLL.dll と myDLL.lib ファイルを取得します。

ブースト ドキュメント (http://wiki.python.org/moin/boost.python/SimpleExample) によると、これを PYTHONPATH に追加する必要があるため、c:\myDLL\Debug を追加しました: PYTHONPATH: C:\Python27 ;c:\myDLL\Debug;

次に、.py ファイルからインポートを試みます。

import getting_started1
print getting_started1.greet()
number = 11
print number, '*', number, '=', getting_started1.square(number)

私はまた、myDLL からのインポートのgetting_started1、およびgetting_started1 からのインポート*、および可能なすべての並べ替えの組み合わせを試しました。

私のモジュールをどのように呼び出すべきか誰か教えてもらえますか? ありがとう

編集: cgohlke によると、VS でコンパイルすると、PYTHONPATH のどこかに gets_started1.pyd が存在するはずですか? このファイルは存在しません... VS2010 で別の設定をする必要がありますか? デフォルトの win32 DLL プロジェクトがあります。しかし、ブースト ドキュメントには、「この共有ライブラリをビルドして PYTHONPATH に配置すると」と書かれていますが、Windows 上の共有ライブラリは DLL ではありませんか? エルゴ、DLL は PYTHONPATH にある必要がありますか?

4

2 に答える 2

2

Python 拡張機能を構築するための標準的で移植可能な方法は、distutilsを使用することです。ただし、Visual Studio 2010 は Python 2.7 でサポートされているコンパイラではありません。次の setup.py は、Visual Studio 2008 と boost_1_48_0 で動作します。ビルドコマンドはpython setup.py build_ext --inplace.

# setup.py
from distutils.core import setup
from distutils.extension import Extension
setup(name="getting_started1",
    ext_modules=[
        Extension("getting_started1", ["getting_started1.cpp"],
        include_dirs=['boost_1_48_0'],
        libraries = ['boost_python-vc90-mt-1_48'],
        extra_compile_args=['/EHsc', '/FD', '/DBOOST_ALL_DYN_LINK=1']
        )
    ])

Visual Studio 2010 プロジェクトでは、リンカー出力ファイルをgetting_started1.pydではなく に変更してみてくださいmyDLL.dll

于 2012-05-31T18:26:18.547 に答える
0
  1. デバッグではなく、リリース構成でのみ動作させることができました。
  2. プロジェクト プロパティの [全般] タブで、[ターゲット拡張子] を .pyd に変更します。
  3. あなたがしたように、プロジェクトは確かにdllでなければなりません
  4. Python スクリプトでは、次の例のように dll の場所を指定する必要があります。
于 2013-03-14T07:21:29.197 に答える