No se puede compilar GDB7.8 con soporte para Python

No se puede compilar GDB7.8 con soporte para Python

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-develpaquete 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.pydevolvieron 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.pyy han realizado cambios para python-config.pyresolver 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 gcccomando. Ejecuté el gcccomando 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, makeinfotambién es necesario instalarlo. El comando para instalar makeinfo fue sudo yum install texinfo.

En general, el conjunto correcto de pasos parece ser

  1. Instalar Python-devel

  2. Instalar texinfo

  3. Descargue la fuente de gdb, comprímala y descomprímala.

  4. cdal gdb-7.9directorio con el configurearchivo.

  5. ./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 LDFLAGSy LIBSque ./configureaceptason diferentes deel LDFLAGSy LIBSque makerequiere. Sí, deberían ser iguales, pero en este caso no lo fueron.


Pasos previos

  1. python3paquete de instalación

  2. python3-develpaquete de instalación

  3. texinfopaquete de instalación

  4. correr /usr/bin/python3.6-config --includes; que imprimió (¡dos veces!)

    -I/usr/include/python3.6m
    
  5. correr /usr/bin/python3.6-config --ldflags; que impreso

    -L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
    
  6. correr /usr/bin/python3.6-config --libs; que impreso

    -lpython3.6m -lpthread -ldl -lutil -lm 
    
  7. 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

información relacionada