Невозможно скомпилировать GDB7.8 с поддержкой Python

Невозможно скомпилировать GDB7.8 с поддержкой Python

Я пытаюсь установить GDB7.8 с поддержкой Python. Из исходной папки я запускаю ./configure --with-python Когда я сделал tab-complete из --with-, я не увидел Python в списке. Но когда я запустил configure с этим флагом, он не забуксовал.

При запуске make выдается сообщение о том, что Python не найден.

checking for python2.7... no

но Python установлен:

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

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

Я скомпилировал GDB без --with-python и все установилось без ошибок. У меня было впечатление, что GDB7.8 поддерживает Python без необходимости в специальных флагах. Но когда я запускаю:

$gdb python
(gdb) run test.py

Я получаю какую-то ошибку «Невозможно импортировать gdb Import»

Тогда я попробовал вызвать «пи»:

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

Итак... как мне получить поддержку Python в GDB7.8? он на самом деле не поддерживается? Или мне не следует вызывать "pi"?

решение1

Я потратил немало времени на то, чтобы заставить gdb (7.9) работать с Python (2.7). В конце концов, все заработало довольно хорошо. Однако есть куча вещей, которые нужно сделать правильно. Ключевым моментом является то, что скрипт конфигурации gdb пытается скомпилировать небольшую программу на C, которая выглядит следующим образом.

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

Если эта программа не скомпилируется, то поддержка Python не будет построена. Для компиляции этой программы необходимо найти файл включения Python.h в /usr/include/python2.7. Этот файл будет существовать только в том случае, если python-develпакет установлен. В моей системе (redhat) команда для установки этого пакета — sudo yum install python-devel.

Однако этого недостаточно для установки Python. Перед тем, как скрипт configure попытается скомпилировать программу на языке C, он получает различные параметры из python-config.py. Если эти параметры неверны, программа на языке C не скомпилируется. В моей системе python-config.pyвернул параметры ниже.

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

Эти опции не вызвали никаких проблем в моей среде. У других людей были проблемы с опциями, возвращаемыми из, python-config.pyи они вносили изменения, чтобы python-config.pyрешить эти проблемы. В моей системе полная команда компиляции была

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

Эта команда компиляции завершилась без ошибок, как только я установил python-devel. Обратите внимание, что вам не нужно вручную вводить gccкоманду. Я выполнил gccкоманду несколько раз, чтобы убедиться, что все правильно. Обычно скрипт конфигурации запускает компилятор для вас. Также обратите внимание, что для завершения всего процесса установки gdb makeinfoтакже необходимо установить . Команда для установки makeinfo была sudo yum install texinfo.

В целом, правильный набор шагов выглядит следующим образом:

  1. Установить python-devel

  2. Установить texinfo

  3. Загрузите исходный код gdb, заархивируйте его и распакуйте.

  4. cdв gdb-7.9каталог с configureфайлом.

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

Должно быть возможно заставить gdb работать с Python 3. Различные скрипты gdb и программы установки упоминают Python 3 во многих, многих местах. Однако правильная процедура установки gdb с Python 3 на данный момент мне неизвестна.

решение2

С выгодойОтличный ответ Питера Шеффера, мне удалось собрать и установить GDB 8.3.1 с Python 3.6 из исходников. Критическое понимание заключалось в том, что LDFLAGSи LIBSкоторый ./configureпринимаетотличаются отLDFLAGSи который LIBSтребует make. Да, они должны быть одинаковыми, но в этом случае они не были такими.


Предварительные шаги

  1. установить python3пакет

  2. установить python3-develпакет

  3. установить texinfoпакет

  4. запустить /usr/bin/python3.6-config --includes; который напечатал (дважды!)

    -I/usr/include/python3.6m
    
  5. запустить /usr/bin/python3.6-config --ldflags; что напечатано

    -L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
    
  6. запустить /usr/bin/python3.6-config --libs; что напечатано

    -lpython3.6m -lpthread -ldl -lutil -lm 
    
  7. найдите реальный путь к двоичному файлу "python3", запустив readlink --canonicalize-existing $(which python3); который вывел

    /usr/bin/python3.6
    

Этапы сборки

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

Связанный контент