C ++ Swig Python (Embedded Python в C ++) работает в Release, но не в Debug - PullRequest
0 голосов
/ 08 июня 2010

Платформа: 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()

Мужчина - это класс 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]

Я привык к Makefiles и новичок в Visual Studio. Я не знаю, кто здесь виноват: Swig, Отладочная сборка Python, Visual Studio, моя глупость.

Заранее спасибо. Это будет отличная помощь.

1 Ответ

1 голос
/ 09 июня 2010

Хорошо - нашел это. Отладочный выход dll должен называться xxx_d.pyd !! В приведенном выше случае это будет _MyClasses_d.pyd

...