создание примеров Python повышения с помощью Visual Studio 2008

Я пользуюсь библиотекой Boost Python для создания расширений Python моего кода C++. Я хотел бы иметь возможность вызвать из Python 'приветствовать' функцию от кода C++, показанного ниже:

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>

char const* greet()
{
   return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

И код Python:

import hello_ext
print hello_ext.greet() 

Мне удалось сделать это использование bjam (hello_ext.pyd, сгенерирован, и это работает хорошее), но теперь я хотел бы создать его с помощью Visual Studio 2008. hello.dll создается (но ни hello_ext.dll, ни любой .pyd). После вызова моего Python кодируют, я получаю ошибку:

ImportError: Никакой модуль, названный hello_ext.

После переименования hello.dll к hello.pyd или hello_ext.pyd, я получаю другой ImportError: загрузка Dll перестала работать

Как я могу создать корректный .pyd файл с помощью VS 2008?

11
задан jf. 7 January 2010 в 07:45
поделиться

3 ответа

Во-первых, убедитесь, что вы только пытаетесь импортировать отладочную версию с Python; импорт отладочной версии будет неудачным, так как версии библиотек исполнения не совпадают. Я также изменил свойства своего проекта так, что релиз-версия выводит .pyd файл:

Properties >> Linker >> Output:

$(OutDir)\$(ProjectName).pyd

(Я также создаю постбилдинговое действие для запуска юнит-тестов с python)

Next, убедитесь, что вы определили следующее в вашем stdafx. h файл:

#define BOOST_PYTHON_STATIC_LIB

Наконец, если у Вас установлено более одной версии питона, убедитесь, что Вы импортируете правильную версию python.h (в меню Инструменты >> Параметры >> Проекты и решения >> VC++ Директории >> Включить файлы).

(Я также создаю постбилдинговую акцию для запуска юнит-тестов с питона)

Далее, убедитесь, что Вы определили в своем stdafx следующее.

10
ответ дан 3 December 2019 в 07:37
поделиться

Убедитесь, что у вас установлен флаг -lpython26 (если вы используете python2.6), а имя файла должно быть hello_ext.pyd в вашем случае.

0
ответ дан 3 December 2019 в 07:37
поделиться

Ошибка ИмпортОшибка: Не удалось загрузить Dll обычно означает, что ваш модуль .pyd зависит от других DLL, которые не удалось найти - часто msvc*.dll. Вы можете попробовать открыть файл .pyd в Блокноте и поискать ".dll". Затем проверьте, существуют ли все DLL-зависимости в Вашем каталоге или PATH.

Или используйте Dependency Walker, который найдет недостающие зависимости для вас

.
5
ответ дан 3 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: