Não é possível compilar GDB7.8 com suporte Python

Não é possível compilar GDB7.8 com suporte Python

Estou tentando instalar o GDB7.8 com suporte para Python. Na pasta de origem, estou executando. ./configure --with-python Quando fiz tab-complete de --with- não vi Python na lista. Mas quando executei o configure com esse sinalizador, ele não hesitou.

Quando executo o make, ele reclama que o Python não foi encontrado.

checking for python2.7... no

mas o Python está instalado:

 $ which python
python                python2.7             python2.7-dbg-config
python2               python2.7-dbg 

$ which python2.7 
/usr/bin/python2.7

Compilei o GDB sem --with-python e instalei tudo sem erros. Fiquei com a impressão de que o GDB7.8 tinha suporte para Python sem a necessidade de sinalizadores especiais. Mas quando eu corro:

$gdb python
(gdb) run test.py

Recebo algum tipo de erro de importação do gdb

Então tentei chamar "pi":

(gdb) pi printf.py
Python scripting is not supported in this copy of GDB.

Então... como obtenho suporte para Python no GDB7.8? na verdade não é suportado? Ou não devo chamar "pi"?

Responder1

Passei um bom tempo trabalhando para fazer o gdb (7.9) funcionar com Python (2.7). No final tudo funcionou bastante bem. No entanto, há um monte de coisas que você precisa acertar. O ponto principal é que o script gdb configure tenta compilar um pequeno programa C parecido com este.

#include "Python.h"
int
main ()
{
Py_Initialize ();
  ;
  return 0;
}

Se este programa não for compilado, o suporte Python não será construído. Para que este programa seja compilado, o arquivo de inclusão Python.h deve ser encontrado em /usr/include/python2.7. Este arquivo só existirá se o python-develpacote estiver instalado. No meu sistema (redhat), o comando para instalar este pacote é sudo yum install python-devel.

No entanto, isso não é suficiente para instalar o Python. Antes do script configure tentar compilar o programa C, ele obtém várias opções de python-config.py. Se essas opções não estiverem corretas, o programa C não será compilado. No meu sistema, python-config.pyretornou as opções abaixo.

-lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic

Essas opções não causaram problemas em meu ambiente. Outras pessoas tiveram problemas com as opções retornadas python-config.pye fizeram alterações para python-config.pyresolver esses problemas. No meu sistema, o comando de compilação completo foi

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 compilação foi concluído sem erros assim que instalei o python-devel. Observe que você não precisa inserir o gcccomando manualmente. Executei o gcccomando várias vezes para ter certeza de que tudo estava correto. Normalmente, o script configure executará o compilador para você. Observe também que, para concluir o processo geral de instalação do gdb, ele makeinfotambém precisava ser instalado. O comando para instalar o makeinfo foi sudo yum install texinfo.

No geral, o conjunto correto de etapas parece ser

  1. Instale python-devel

  2. Instale o texinfo

  3. Baixe a fonte gdb, compacte-a e descompacte-a.

  4. cdpara o gdb-7.9diretório com o configurearquivo.

  5. ./configure --prefix=/usr --with-python
    make 
    sudo make install
    

Deveria ser possível fazer o gdb funcionar com o Python 3. Os vários scripts e programas de instalação do gdb mencionam o Python 3 em muitos, muitos lugares. No entanto, o procedimento correto para instalar o gdb com Python 3 é desconhecido para mim neste momento.

Responder2

Com benefício deExcelente resposta de Peter Schaeffer, consegui construir e instalar o GDB 8.3.1 com Python 3.6, a partir do código-fonte. O insight crítico foi que o LDFLAGSe LIBSque ./configureaceitasão diferentes deo LDFLAGSe LIBSque makerequer. Sim, deveriam ser iguais, mas neste caso não eram.


Etapas de pré-requisito

  1. instalar python3pacote

  2. instalar python3-develpacote

  3. instalar texinfopacote

  4. correr /usr/bin/python3.6-config --includes; que imprimiu (duas vezes!)

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

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

    -lpython3.6m -lpthread -ldl -lutil -lm 
    
  7. encontre o caminho real do binário "python3", executando readlink --canonicalize-existing $(which python3); que imprimiu

    /usr/bin/python3.6
    

Etapas de construção

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

informação relacionada