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.

  • изменять цвет каждого бара на барграфе с использованием определенного значения
  • Matplotlib.Pyplot не показывает вывод; Нет ошибки
  • Поиск слова в текстовой строке в листе Excel с помощью openpyxl
  • Как полностью удалить пустое пространство вокруг диаграммы рассеяния?
  • Область действия переменной python для цикла
  • Как люди обычно реализуют jsonp в python?
  • Кодирование с плавающей запятой
  • xlwings с python 3.5 в Windows
  • 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 - лучший язык программирования в мире.