Estoy intentando instalar GDB7.8 con soporte para Python. Desde la carpeta de origen, estoy ejecutando ./configure --with-python
Cuando completé la pestaña desde --con- no vi Python en la lista. Pero cuando ejecuté la configuración con ese indicador, no se resistió.
Cuando ejecuto make, se queja de que no se encuentra Python.
checking for python2.7... no
pero Python está instalado:
$ which python
python python2.7 python2.7-dbg-config
python2 python2.7-dbg
$ which python2.7
/usr/bin/python2.7
Compilé GDB sin --with-python y todo lo instalado sin errores. Tenía la impresión de que GDB7.8 tenía soporte para Python sin necesidad de indicadores especiales. Pero cuando corro:
$gdb python
(gdb) run test.py
Recibo algún tipo de error de importación de gdb que no se puede importar
Entonces intenté llamar a "pi":
(gdb) pi printf.py
Python scripting is not supported in this copy of GDB.
Entonces... ¿cómo obtengo soporte para Python en GDB7.8? ¿En realidad no es compatible? ¿O no debería llamar "pi"?
Respuesta1
Pasé bastante tiempo trabajando para que gdb (7.9) funcionara con Python (2.7). Al final todo funcionó bastante bien. Sin embargo, hay un montón de cosas que debes hacer bien. El punto clave es que el script de configuración gdb intenta compilar un pequeño programa en C que se parece a este.
#include "Python.h"
int
main ()
{
Py_Initialize ();
;
return 0;
}
Si este programa no se compila, entonces no se creará compatibilidad con Python. Para que este programa se pueda compilar, el archivo de inclusión Python.h debe encontrarse en formato /usr/include/python2.7
. Este archivo sólo existirá si el python-devel
paquete está instalado. En mi sistema (redhat), el comando para instalar este paquete es sudo yum install python-devel
.
Sin embargo, eso no es suficiente para instalar Python. Antes de que el script de configuración intente compilar el programa C, obtiene varias opciones de python-config.py
. Si estas opciones no son correctas, entonces el programa C no se compilará. En mi sistema, python-config.py
devolvieron las siguientes opciones.
-lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic
Estas opciones no causaron ningún problema en mi entorno. Otras personas han tenido problemas con las opciones devueltas python-config.py
y han realizado cambios para python-config.py
resolver estos problemas. En mi sistema el comando de compilación completo era
gcc -o conftest -g -O2 -I/usr/include/python2.7 -I/usr/include/python2.7 \
conftest.c -ldl -lncurses -lz -lm -ldl -lpthread -ldl -lutil -lm \
-lpython2.7 -Xlinker -export-dynamic
Este comando de compilación se completó sin errores tan pronto como lo instalé python-devel
. Tenga en cuenta que no es necesario que ingrese manualmente el gcc
comando. Ejecuté el gcc
comando varias veces para asegurarme de que todo estuviera correcto. Normalmente, el script de configuración ejecutará el compilador por usted. También tenga en cuenta que para completar el proceso general de instalación de gdb, makeinfo
también es necesario instalarlo. El comando para instalar makeinfo fue sudo yum install texinfo
.
En general, el conjunto correcto de pasos parece ser
Instalar Python-devel
Instalar texinfo
Descargue la fuente de gdb, comprímala y descomprímala.
cd
algdb-7.9
directorio con elconfigure
archivo.-
./configure --prefix=/usr --with-python make sudo make install
Debería ser posible hacer que gdb funcione con Python 3. Los diversos scripts y programas de instalación de gdb mencionan Python 3 en muchos, muchos lugares. Sin embargo, en este momento desconozco el procedimiento correcto para instalar gdb con Python 3.
Respuesta2
Con beneficio deExcelente respuesta de Peter Schaeffer, Pude compilar e instalar GDB 8.3.1 con Python 3.6, desde la fuente. La idea crítica fue que el LDFLAGS
y LIBS
que ./configure
aceptason diferentes deel LDFLAGS
y LIBS
que make
requiere. Sí, deberían ser iguales, pero en este caso no lo fueron.
Pasos previos
python3
paquete de instalaciónpython3-devel
paquete de instalacióntexinfo
paquete de instalacióncorrer
/usr/bin/python3.6-config --includes
; que imprimió (¡dos veces!)-I/usr/include/python3.6m
correr
/usr/bin/python3.6-config --ldflags
; que impreso-L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
correr
/usr/bin/python3.6-config --libs
; que impreso-lpython3.6m -lpthread -ldl -lutil -lm
encuentre la ruta real del binario "python3", ejecutando
readlink --canonicalize-existing $(which python3)
; que impreso/usr/bin/python3.6
Pasos de construcción
export CFLAGS="-I/usr/include/python3.6m"
export LDFLAGS="-L/usr/lib64"
export LIBS="-lpython3"
readonly configureOptions="\
--disable-ada \
--disable-cloog-version-check \
--disable-gdbmi \
--disable-host-shared \
--disable-isl-version-check \
--disable-libssp \
--disable-libquadmath \
--disable-libquadmath-support \
--disable-objc-gc \
--disable-source-highlight \
--disable-stage1-checking \
--disable-static-libjava \
--disable-tui \
--disable-werror \
--enable-stage1-languages=c,c++ \
--enable-vtable-verify \
--with-python=/usr/bin/python3.6 \
--with-static-standard-libraries \
--with-system-zlib \
--without-cloog \
--without-guile \
--without-isl \
--without-mpfr \
"
./configure $configureOptions
export LDFLAGS="-L/usr/lib64 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic"
export LIBS="-lpython3.6m -lpthread -ldl -lutil -lm"
make
make install