c++ - Ubuntu-Vinculación de boost.python-Error fatal: no se puede encontrar pyconfig
gcc boost-python (4)
Teniendo algunos problemas, ahora he leído lo siguiente:
hello world python extension en c ++ usando boost?
Intenté instalar boost en mi escritorio y, como lo sugirieron las publicaciones en términos de vinculación. Tengo el siguiente código:
#include <boost/python.hpp>
#include <Python.h>
using namespace boost::python;
Ahora he intentado enlazar con lo siguiente:
g++ testing.cpp -I /usr/include/python2.7/pyconfig.h -L /usr/include/python2.7/Python.h
-lpython2.7
Y he intentado lo siguiente también:
g++ testing.cpp -I /home/username/python/include/ -L /usr/include/python2.7/Python.h -lpython2.7
Sigo recibiendo el siguiente error:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such
file or directory
# include <pyconfig.h>
No sé dónde me estoy equivocando. Tengo boost.python instalado, ¿hay un problema al vincular?
Acabo de tener el mismo error, el problema es g ++ no puedo encontrar pyconfig.h (impactante, lo sé). Para mí, este archivo se encuentra en /usr/include/python2.7/pyconfig.h
por lo que debe -I /usr/include/python2.7/
, como alternativa, puede agregar el directorio a su ruta con:
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"
También puede agregar esto a su .bashrc y se agregará cada vez que inicie su shell próximamente (tendrá que volver a abrir su terminal para realizar los cambios).
Puede encontrar su propia ruta de acceso de python utilizando find /usr/include -name pyconfig.h
, en mi caso esto devuelve:
/usr/include/python2.7/pyconfig.h
/usr/include/i386-linux-gnu/python2.7/pyconfig.h
Existen dos posibles causas para este síntoma: 1. no tiene instalado python-dev. 2. tiene python-dev instalado y su ruta de inclusión está configurada incorrectamente, que la publicación anterior proporciona una solución. En mi caso, estaba instalando boost, y está buscando el archivo de encabezado pyconfig.h que falta en mi ubuntu:
La solucion es
apt-get install python-dev
En otros sabores de Linux, debes averiguar cómo instalar el encabezado de Python.
Si tiene un archivo .c
( hello.c
) y desea crear una biblioteca libhello.so
, intente:
find /usr/include -name pyconfig.h
[fuera]:
/usr/include/python2.7/pyconfig.h
/usr/include/x86_64-linux-gnu/python2.7/pyconfig.h
luego usa la salida y hazlo:
gcc -shared -o libhello.so -fPIC hello.c -I /usr/include/python2.7/
Si está convirtiendo de .pyx de cython a .so, intente con este módulo de python, que automáticamente compilará el archivo .so dado el archivo .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'')
Tuve una experiencia similar al generar boost para centos7. No pude encontrar pyconfig.h en mi sistema solamente pyconfig-64.h.
Después de buscar descubrí que necesitas instalar python-devel para obtener pyconfig.h