ImportError: /usr/lib/libboost_python.so.1.54.0: undefined symbol: PyClass_Type

У меня код написан на C ++:

#include <boost/python.hpp> char const* greet() { return "Yay!"; } BOOST_PYTHON_MODULE(libtest) { using namespace boost::python; def("greet", greet); } 

Теперь я хочу импортировать эту динамическую библиотеку в python:

 import libtest 

Но я понимаю:

 ImportError: /usr/lib/libboost_python.so.1.54.0: undefined symbol: PyClass_Type 

Что мне делать? Моя ОС – Arch Linux.

2 Solutions collect form web for “ImportError: /usr/lib/libboost_python.so.1.54.0: undefined symbol: PyClass_Type”

Хорошо, я нашел решение этой проблемы. Простейшими параметрами являются компиляция:

 g++ testing.cpp -I/usr/include/python3.3m -I/usr/include/boost -lboost_python3 -lpython3.3m -o testing.so -shared -fPIC 

Раньше я использовал -lboost_python вместо -lboost_python3 … Но это решение не является кросс-платформой, поэтому мы можем достичь этого с помощью cmake:

 cmake_minimum_required(VERSION 2.6) find_package(Boost 1.54 EXACT REQUIRED COMPONENTS python3) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} "/usr/include/python3.3m/" ) find_package(PythonLibs) ADD_LIBRARY(testing SHARED testing.cpp) TARGET_LINK_LIBRARIES(testing ${Boost_LIBRARIES} ${PythonLibs_LIBRARIES}) 

Конечно, «/usr/include/python3.3m» не будет пустым для pythons include directory во всех дистрибутивах linux.

Используйте ту же версию Python при создании как Boost.Python, так и libtest модуля, а также при импорте libtest .

PyClass_Type является частью API Python 2 C, а не частью API Python 3 C. Следовательно, библиотека Boost.Python, скорее всего, была построена на Python 2. Однако она загружается интерпретатором Python 3, где PyClass_Type недоступен.

  • Как импортировать модуль python из .so-файла?
  • Выполнение программы C в python?
  • Есть ли эквивалент цикла «for ... else» Python в C ++?
  • OpenCV Python связывает невероятно медленные итерации с помощью данных изображения
  • Как библиотеки на разных языках программирования обрабатывают Date & Time, Timestamps & Durations, Leapseconds & -ears, DSTs & Timezones, ...?
  • Обратный вызов Python от SWIG PyObject_Call Segfault
  • Интеграция C и Python: ValueError: функции модуля не могут устанавливать METH_CLASS или METH_STATIC
  • Вызовите Ruby или Python API в C # .NET.
  • Вызов скрипта python из C ++ и использование его вывода
  • Как создать строку python из структуры ctype?
  • Отличается ли производительность между Python или C ++-кодированием OpenCV?
  •  
    Interesting Posts for Van-Lav

    Ответить в Твитнуть с Tweepy – Python

    Латексная цитата в matplotlib Легенда

    Управление браузером с помощью Python на Mac

    Ошибка Django South: «нет совместимого приложения, соответствующего« myapp »»

    Только определенный уровень регистрации на python

    Скрипт Python для создания zip-файла на удаленном сервере

    Каковы шаги, чтобы заставить ModelForm работать с отношениями ManyToMany с промежуточной моделью в Django?

    Декораторы классов и декораторы

    Python 2.7 ply.yacc генерирует ошибку «не может получить исходный код» в pyinstaller

    Что не так с моим шаблоном регулярного выражения, чтобы найти повторяющиеся циклы в Python?

    Как обрабатывать переменную dict с 2 ^ 50 элементами?

    Рекомендации: как вы указываете требуемые зависимости в файле setup.py?

    найти временной сдвиг между двумя подобными сигналами

    Выход функции cython немного отличается от вывода функции python

    Ограничение глубины набора инструментов для разрешенного_домена

    Python - лучший язык программирования в мире.