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:
- Обработка изображений OpenCV - C ++ vs C vs Python
- Неустранимая ошибка во время Py_Finalize во встроенном приложении Python
- Как запустить скрипт Python с C #?
- Как определить, идентичны ли два раздела (кластеризации) точек данных?
- Как получить графический интерфейс Python для вызова генетического алгоритма, написанного на C
import libtest
Но я понимаю:
ImportError: /usr/lib/libboost_python.so.1.54.0: undefined symbol: PyClass_Type
Что мне делать? Моя ОС – Arch Linux.
- Попытка понять процедуру связывания для написания гибрида Python / C ++
- ctypes error Символ атрибутаError не найден, OS X 10.7.5
- Вызов Python из Objective-C
- Некоторые команды Python не попадают в Stdout
- У меня Python на моей системе Ubuntu, но gcc не может найти Python.h
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?
- Какой язык программирования имеет очень короткую контекстно-свободную грамматику в ее формальной спецификации?
- Внедрение Python в C - импорт модулей
- Пример Cython c ++ не распознает c ++, почему?
- Передайте массив 2d numpy в c, используя ctypes
- Добавление printf к запуску всех функций в файле
- Быстрый расчет логарифма
- Как преобразовать строку C (char array) в строку Python, когда в строке есть символы, отличные от ASCII?
- Почему эта очевидная бесконечная рекурсия не дает предупреждения компилятора?
- Ускорение процесса сборки с distutils
- ImportError: динамический модуль не определяет функцию init (initfizzbuzz)
- Boost :: Python - возможно автоматическое преобразование из dict -> std :: map?