C++ Swig Python(嵌入式Python在C++中)在Release模式下正常,但在Debug模式下不行

0 投票
1 回答
1872 浏览
提问于 2025-04-15 23:42

平台: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。

撰写回答