DLL, созданная Boost.Python, не может быть импортирована (после быстрого запуска Boost Python)

Я пытаюсь следовать инструкциям Вот использовать Boost.Python. Исходный код находится на этой веб-странице. Я могу скомпилировать, связать этот простой пример кода, но я не могу импортировать полученный модуль в командной строке Python. Это всегда ошибка:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named hello_ext

Я понятия не имею, в чем дело, потому что эта страница просто говорит: «Вот и все. Мы закончили. Теперь мы можем построить это как общую библиотеку. Полученная DLL теперь видима для Python». Это моя строительная среда:

  • Windows 7 64 бит, я администратор и запускаю cmd от имени администратора
  • буст-версия 1.64.0 (предварительно скомпилированный двоичный файл boost_1_64_0-msvc-14.0-64.exe, загруженный с Вот)
  • версия Python 2.7.13, 64 бит
  • Visual studio 2015, обновление 3
  • Целью является DLL
  • Имя проекта — ConsoleApplication1, поэтому вывод — ConsoleApplication1.dll. Я изменил имя файла hello_ext.dll, но та же ошибка.
  • Я построил с конфигурацией x64, и я подтвердил с помощью dumpbin, что выход ConsoleApplication1.dll действительно 64 бит
  • Я добавил путь …… \ ConsoleApplication1 \ x64 \ Release, содержащий ConsoleApplication1.dll, в sys.path внутри командной строки python.

Итак, не могли бы вы сказать мне, как импортировать модуль в Python? Большое спасибо.

0

Решение

Я решил проблему сам. Спасибо jagerman за его полезные предложения.

(1) Просто измените имя выходного файла с ConsoleApplication1.dll на hello_ext.pyd. Вы можете автоматизировать это переименование, установив Pages-> General-> Target Extension в «.pyd». Убедитесь, что файл hello_ext.pyd находится в пути поиска Python. Вы можете просто бросить его в C: \ Python27 \ DLLs, который является одним из встроенных путей поиска python.

(2) Теперь вы получите другую ошибку импорта: сбой загрузки DLL: указанный модуль не найден. Если вы внимательно посмотрите на размер файла hello_ext.pyd, вы, вероятно, заметите что-то проводное — это всего 19 КБ. Это означает, что он не содержит всего необходимого для импорта в python, поэтому python должен найти недостающую часть, чтобы правильно импортировать ее. Да, вы можете догадаться, что — единственно возможный недостающий материал — это библиотеки Boost.Python, поэтому добавьте путь к нему в переменную среды PATH — для меня это C: \ local \ boost_1_64_0 \ lib64-msvc-14.0.

Тогда проблема решена. Примечание: некоторые ответы на другие связанные вопросы могут предлагать сборку как статическую библиотеку. Таким образом, вы получите еще одну ошибку импорта: сбой загрузки DLL:% 1 не является допустимым приложением Win32. Так что просто постройте как DLL. PS: вам не нужно указывать boost_python-vc140-mt-1_64.lib или boost_python-vc140-mt-gd-1_64.lib на страницах свойств-> Linker-> Input-> Additional Dependencies, как предлагалось в некоторых комментариях.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]