Ich versuche, GDB7.8 mit Python-Unterstützung zu installieren. Aus dem Quellordner führe ich aus. ./configure --with-python
Als ich die Tab-Vervollständigung von --with- aus ausführte, wurde Python nicht in der Liste angezeigt. Aber als ich configure mit diesem Flag ausführte, gab es keinen Fehler.
Wenn ich make ausführe, wird eine Meldung angezeigt, dass Python nicht gefunden wird.
checking for python2.7... no
aber Python ist installiert:
$ which python
python python2.7 python2.7-dbg-config
python2 python2.7-dbg
$ which python2.7
/usr/bin/python2.7
Ich habe GDB ohne --with-python kompiliert und die Installation hat fehlerfrei funktioniert. Ich hatte den Eindruck, dass GDB7.8 Python-Unterstützung ohne spezielle Flags bietet. Aber wenn ich Folgendes ausführe:
$gdb python
(gdb) run test.py
Ich erhalte die Fehlermeldung „GDB kann nicht importiert werden“.
Also habe ich versucht, "pi" aufzurufen:
(gdb) pi printf.py
Python scripting is not supported in this copy of GDB.
Also... wie bekomme ich Python-Unterstützung in GDB7.8? Wird es tatsächlich nicht unterstützt? Oder sollte ich „pi“ nicht aufrufen?
Antwort1
Ich habe ziemlich viel Zeit darauf verwendet, gdb (7.9) mit Python (2.7) zum Laufen zu bringen. Am Ende hat alles ziemlich gut funktioniert. Es gibt jedoch eine Menge Dinge, die Sie richtig machen müssen. Der entscheidende Punkt ist, dass das gdb-Konfigurationsskript versucht, ein kleines C-Programm zu kompilieren, das so aussieht.
#include "Python.h"
int
main ()
{
Py_Initialize ();
;
return 0;
}
Wenn dieses Programm nicht kompiliert werden kann, wird keine Python-Unterstützung erstellt. Damit dieses Programm kompiliert werden kann, muss die Include-Datei Python.h in gefunden werden /usr/include/python2.7
. Diese Datei existiert nur, wenn das python-devel
Paket installiert ist. Auf meinem System (Redhat) lautet der Befehl zum Installieren dieses Pakets sudo yum install python-devel
.
Das reicht jedoch nicht aus, um Python zu installieren. Bevor das Konfigurationsskript versucht, das C-Programm zu kompilieren, ruft es verschiedene Optionen von ab python-config.py
. Wenn diese Optionen nicht korrekt sind, wird das C-Programm nicht kompiliert. Auf meinem System python-config.py
wurden die folgenden Optionen zurückgegeben.
-lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic
Diese Optionen haben in meiner Umgebung keine Probleme verursacht. Andere Leute hatten Probleme mit den von zurückgegebenen Optionen python-config.py
und haben Änderungen an vorgenommen, python-config.py
um diese Probleme zu beheben. Auf meinem System lautete der vollständige Kompilierbefehl
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
Dieser Kompilierbefehl wurde ohne Fehler abgeschlossen, sobald ich installiert hatte python-devel
. Beachten Sie, dass Sie den Befehl nicht manuell eingeben müssen gcc
. Ich habe den gcc
Befehl mehrmals ausgeführt, um sicherzustellen, dass alles richtig war. Normalerweise führt das Konfigurationsskript den Compiler für Sie aus. Beachten Sie auch, dass zur Fertigstellung des gesamten GDB-Installationsprozesses makeinfo
auch installiert werden musste. Der Befehl zur Installation von makeinfo war sudo yum install texinfo
.
Insgesamt gesehen scheinen die richtigen Schritte zu sein
Installieren Sie python-devel
Installieren Sie Texinfo
Laden Sie die GDB-Quelle herunter, komprimieren und entpacken Sie sie.
cd
in dasgdb-7.9
Verzeichnis mit derconfigure
Datei.-
./configure --prefix=/usr --with-python make sudo make install
Es sollte möglich sein, gdb mit Python 3 zum Laufen zu bringen. Die verschiedenen gdb-Skripte und Installationsprogramme erwähnen Python 3 an vielen, vielen Stellen. Das korrekte Verfahren zur Installation von gdb mit Python 3 ist mir derzeit jedoch nicht bekannt.
Antwort2
Mit Vorteil vonPeter Schaeffers ausgezeichnete Antwortkonnte ich GDB 8.3.1 mit Python 3.6 aus dem Quellcode erstellen und installieren. Die entscheidende Erkenntnis war, dass LDFLAGS
und LIBS
akzeptiert./configure
sind verschieden vondas LDFLAGS
und LIBS
was make
erfordert. Ja, sie sollten gleich sein, aber in diesem Fall waren sie es nicht.
Erforderliche Schritte
Installationspaket
python3
Installationspaket
python3-devel
Installationspaket
texinfo
ausführen
/usr/bin/python3.6-config --includes
; das wurde (zweimal!) gedruckt-I/usr/include/python3.6m
laufen
/usr/bin/python3.6-config --ldflags
; das gedruckt-L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
laufen
/usr/bin/python3.6-config --libs
; das gedruckt-lpython3.6m -lpthread -ldl -lutil -lm
Finden Sie den tatsächlichen Pfad der Binärdatei „python3“, indem Sie ausführen
readlink --canonicalize-existing $(which python3)
; das Ergebnis ist/usr/bin/python3.6
Schritte erstellen
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