無法編譯 Python 支援的 GDB7.8

無法編譯 Python 支援的 GDB7.8

我正在嘗試安裝帶有 Python 支援的 GDB7.8。從來源資料夾中,我正在運行./configure --with-python 當我從 --with- 執行製表符完成時,我沒有在列表中看到 Python。但是當我使用該標誌運行配置時,它並沒有阻止。

當我運行 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

我在沒有 --with-python 的情況下編譯了 GDB,安裝時沒有錯誤。我的印像是 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 設定腳本嘗試編譯一個如下所示的小 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。在配置腳本嘗試編譯 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. cdgdb-7.9包含該configure檔案的目錄。

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

應該可以讓 gdb 與 Python 3 一起運作。然而,目前我還不知道使用 Python 3 安裝 gdb 的正確程序。

答案2

受益於Peter Schaeffer 的精彩回答,我能夠使用 Python 3.6 從原始碼建置和安裝 GDB 8.3.1。關鍵的見解是LDFLAGSLIBS接受./configure不同於LDFLAGSLIBSmake要求的。是的,它們應該是相同的,但在這種情況下它們不是。


前提步驟

  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

相關內容