C++ Swig Python(嵌入式Python在C++中)在Release模式下正常,但在Debug模式下不行
平台:Windows 7,64位(x64),Visual Studio 2008
我选择了Python和Swig绑定作为这个应用程序的脚本环境。
作为一个原型,我创建了一个简单的VS解决方案,其中有一个main()函数,用来初始化Python(比如Py_Initalize、Py_setPyHome等)并执行test.py。在同一个解决方案中,我还创建了另一个项目,这是一个简单类的DLL。我用SWIG来包装这个类。这个DLL就是_MyClasses.pyd。test.py会创建我这个类的对象,并调用它的成员函数。
在发布模式下,这一切都运行得很好。但在调试模式下就不行了(我甚至试着用头撞笔记本电脑;-))。
我的工作输出看起来是这样的(在发布和调试模式下都是一样的):
x64
-debug
- _MyClasses.pyd
- MyClasses.py
- test.exe
- test.py
- python26.dll
- python26_d.dll
注意,调试版本是链接到python26_d.lib的。我不得不自己编译Python!
test.py
import MyClasses
print "ello"
m = MyClasses.Male("John Doe", 25)
print m.getType()
Male是C++类。
The problem:
Traceback (most recent call last):
File "test.py", line 6, in <module>
import MyClasses
File "...\x64\Debug\MyClasses.py", line 25, in <module>
_MyClasses = swig_import_helper()
File "...\x64\Debug\MyClasses.py", line 17, in swig_imp
ort_helper
import _MyClasses
ImportError: No module named _MyClasses
[15454 refs]
我习惯使用Makefile,对Visual Studio还不太熟悉。我不知道问题出在哪里:是Swig、Python的调试版本、Visual Studio,还是我自己笨。
提前谢谢你。这将是很大的帮助。
1 个回答
1
好的,找到了。调试输出的dll文件必须命名为xxx_d.pyd!在上面的例子中,它应该是_MyClasses_d.pyd。