GDB7.8 kann mit Python-Unterstützung nicht kompiliert werden

GDB7.8 kann mit Python-Unterstützung nicht kompiliert werden

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-develPaket 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.pywurden 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.pyund haben Änderungen an vorgenommen, python-config.pyum 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 gccBefehl 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 makeinfoauch installiert werden musste. Der Befehl zur Installation von makeinfo war sudo yum install texinfo.

Insgesamt gesehen scheinen die richtigen Schritte zu sein

  1. Installieren Sie python-devel

  2. Installieren Sie Texinfo

  3. Laden Sie die GDB-Quelle herunter, komprimieren und entpacken Sie sie.

  4. cdin das gdb-7.9Verzeichnis mit der configureDatei.

  5. ./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 LDFLAGSund LIBSakzeptiert./configuresind verschieden vondas LDFLAGSund LIBSwas makeerfordert. Ja, sie sollten gleich sein, aber in diesem Fall waren sie es nicht.


Erforderliche Schritte

  1. Installationspaketpython3

  2. Installationspaketpython3-devel

  3. Installationspakettexinfo

  4. ausführen /usr/bin/python3.6-config --includes; das wurde (zweimal!) gedruckt

    -I/usr/include/python3.6m
    
  5. laufen /usr/bin/python3.6-config --ldflags; das gedruckt

    -L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
    
  6. laufen /usr/bin/python3.6-config --libs; das gedruckt

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

verwandte Informationen