我使用boost :: python在VS2010中构建了一个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文件。
根据boost doc(http://wiki.python.org/moin/boost.python/SimpleExample),我需要将它添加到PYTHONPATH,所以我添加了c:\ myDLL \ Debug: PYTHONPATH: C:\ Python27; C:\ MYDLL \调试;
然后,从我的.py文件中,我尝试导入它:
import getting_started1
print getting_started1.greet()
number = 11
print number, '*', number, '=', getting_started1.square(number)
我也尝试过myDLL import getting_started1,来自getting_started1 import *,以及所有可能的排序组合。
谁能告诉我怎么称呼我的模块?感谢
编辑: 根据cgohlke的说法,当我在VS中编译时,我的PYTHONPATH中应该有一个getting_started1.pyd?这个文件是不存在的......我是否必须在VS2010中设置一些不同的东西?我有一个默认的win32 DLL项目。 但是升级文档说“如果我们构建这个共享库并把它放在我们的PYTHONPATH上”,那么Windows上的共享库是不是DLL?这个DLL应该在PYTHONPATH中吗?
答案 0 :(得分: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
。
答案 1 :(得分:0)