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-devel
pacote 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.py
retornou 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.py
e fizeram alterações para python-config.py
resolver 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 gcc
comando manualmente. Executei o gcc
comando 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 makeinfo
também precisava ser instalado. O comando para instalar o makeinfo foi sudo yum install texinfo
.
No geral, o conjunto correto de etapas parece ser
Instale python-devel
Instale o texinfo
Baixe a fonte gdb, compacte-a e descompacte-a.
cd
para ogdb-7.9
diretório com oconfigure
arquivo.-
./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 LDFLAGS
e LIBS
que ./configure
aceitasão diferentes deo LDFLAGS
e LIBS
que make
requer. Sim, deveriam ser iguais, mas neste caso não eram.
Etapas de pré-requisito
instalar
python3
pacoteinstalar
python3-devel
pacoteinstalar
texinfo
pacotecorrer
/usr/bin/python3.6-config --includes
; que imprimiu (duas vezes!)-I/usr/include/python3.6m
correr
/usr/bin/python3.6-config --ldflags
; que imprimiu-L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
correr
/usr/bin/python3.6-config --libs
; que imprimiu-lpython3.6m -lpthread -ldl -lutil -lm
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