无法编译支持 Python 的 GDB7.8

无法编译支持 Python 的 GDB7.8

我正在尝试安装支持 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

总体而言,正确的步骤似乎是

  1. 安装 python-devel

  2. 安装 texinfo

  3. 下载 gdb 源代码并用 gunzip 压缩并解压。

  4. cdgdb-7.9包含该configure文件的目录。

  5. ./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。关键的见解LDFLAGSLIBS接受./configure不同于LDFLAGSLIBS要求。是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

相关内容