我正在尝试安装支持 Python 的 GDB7.8。从源文件夹,我正在运行./configure --with-python
当我从 --with- 执行 tab-complete 时,我没有在列表中看到 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 导入错误
于是我尝试调用“pi”:
(gdb) pi printf.py
Python scripting is not supported in this copy of GDB.
那么...如何在 GDB7.8 中获得 Python 支持?它实际上不受支持吗?或者我不应该调用“pi”?
答案1
我花了不少时间让 gdb (7.9) 与 Python (2.7) 兼容。最后一切都运行得相当顺利。但是,还有很多事情需要你做对。关键是 gdb configure 脚本会尝试编译一个如下所示的小型 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
几次命令以确保一切正确。通常,configure 脚本将为您运行编译器。另请注意,要完成整个 gdb 安装过程,makeinfo
还必须安装。安装 makeinfo 的命令是sudo yum install texinfo
。
总体而言,正确的步骤似乎是
安装 python-devel
安装 texinfo
下载 gdb 源代码并用 gunzip 压缩并解压。
cd
到gdb-7.9
包含该configure
文件的目录。-
./configure --prefix=/usr --with-python make sudo make install
应该可以让 gdb 与 Python 3 配合使用。各种 gdb 脚本和安装程序在很多地方都提到了 Python 3。但是,目前我还不知道使用 Python 3 安装 gdb 的正确步骤。
答案2
受益于Peter Schaeffer 的精彩回答,我能够从源代码构建和安装 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