Ubuntu — Связывание boost.python — Неустранимая ошибка: pyconfig не может быть найден

Имея некоторые проблемы, теперь я прочитал следующее:

Привет, мир Python расширение в C ++, используя Boost?

Я попытался установить надстройку на мой рабочий стол, и, как указано в сообщениях, предложенных с точки зрения ссылок. У меня есть следующий код:

#include <boost/python.hpp>
#include <Python.h>
using namespace boost::python;

Теперь я попытался связать со следующим:

g++ testing.cpp -I /usr/include/python2.7/pyconfig.h -L /usr/include/python2.7/Python.h
-lpython2.7

И я попробовал следующее:

g++ testing.cpp -I /home/username/python/include/ -L /usr/include/python2.7/Python.h -lpython2.7

Я продолжаю получать следующую ошибку:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such
file or directory
# include <pyconfig.h>

Я не знаю, где я иду не так. У меня установлен boost.python, просто проблема с линковкой?

32

Решение

У меня была такая же ошибка, проблема в том, что g ++ не может найти pyconfig.h (шокирует, я знаю). Для меня этот файл находится в /usr/include/python2.7/pyconfig.h так добавляя -I /usr/include/python2.7/ должен исправить это, в качестве альтернативы вы можете добавить каталог к ​​вашему пути с помощью:

export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"

Вы также можете добавить это в ваш .bashrc, и он будет добавлен всякий раз, когда вы в следующий раз запустите свою оболочку (вам нужно будет снова открыть свой терминал, чтобы реализовать изменения).

Вы можете найти свой собственный путь включения Python, используя find /usr/include -name pyconfig.hв моем случае это возвращает:

/usr/include/python2.7/pyconfig.h
/usr/include/i386-linux-gnu/python2.7/pyconfig.h
61

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

Есть две возможные причины этого симптома: 1. у вас не установлен python-dev. 2. у вас установлен python-dev, и ваш путь включения неверно настроен, что вышеизложенная публикация обеспечивает решение. В моем случае я устанавливал boost, и он ищет заголовочный файл pyconfig.h, который отсутствует в моем Ubuntu:

Решение

apt-get install python-dev

В других версиях Linux вы должны выяснить, как установить заголовок Python.

11

Если у тебя есть .c файл (hello.c) и вы хотите построить libhello.so библиотека, попробуйте:

find /usr/include -name pyconfig.h
[из]:

/usr/include/python2.7/pyconfig.h
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h

затем используйте вывод и выполните:

gcc -shared -o libhello.so -fPIC hello.c -I /usr/include/python2.7/

Если вы конвертируете из Python .pyx в .so, попробуйте этот модуль python, он автоматически создаст .so файл с учетом файла .pyx:

def pythonizing_cython(pyxfile):
import os
# Creates ssetup_pyx.py file.
setup_py = "\n".join(["from distutils.core import setup",
"from Cython.Build import cythonize",
"setup(ext_modules = cythonize('"+\
pyxfile+".pyx'))"])

with open('setup_pyx.py', 'w') as fout:
fout.write(setup_py)

# Compiles the .c file from .pyx file.
os.system('python setup_pyx.py build_ext --inplace')

# Finds the pyconfig.h file.
pyconfig = os.popen('find /usr/include -name pyconfig.h'\
).readline().rpartition('/')[0]

# Builds the .so file.
cmd = " ".join(["gcc -shared -o", pyxfile+".so",
"-fPIC", pyxfile+".c",
"-I", pyconfig])
os.system(cmd)

# Removing temporary .c and setup_pyx.py files.
os.remove('setup_pyx.py')
os.remove(pyxfile+'.c')
7

У меня был похожий опыт при создании наддува для centos7. Я не смог найти pyconfig.h в моей системе только pyconfig-64.h.

После поиска я обнаружил, что вам нужно установить python-devel, чтобы получить pyconfig.h

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