Я пытаюсь установить 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
.
В целом, правильный набор шагов выглядит следующим образом:
Установить python-devel
Установить texinfo
Загрузите исходный код gdb, заархивируйте его и распакуйте.
cd
вgdb-7.9
каталог сconfigure
файлом.-
./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
. Да, они должны быть одинаковыми, но в этом случае они не были такими.
Предварительные шаги
установить
python3
пакетустановить
python3-devel
пакетустановить
texinfo
пакетзапустить
/usr/bin/python3.6-config --includes
; который напечатал (дважды!)-I/usr/include/python3.6m
запустить
/usr/bin/python3.6-config --ldflags
; что напечатано-L/usr/lib64 -lpython3.6m -lpthread -ldl -lutil -lm -Xlinker -export-dynamic
запустить
/usr/bin/python3.6-config --libs
; что напечатано-lpython3.6m -lpthread -ldl -lutil -lm
найдите реальный путь к двоичному файлу "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