我正在嘗試安裝帶有 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
。
總的來說,正確的步驟似乎是
安裝 python-devel
安裝texinfo
下載 gdb 原始碼並將其壓縮並解壓縮。
cd
到gdb-7.9
包含該configure
檔案的目錄。-
./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。關鍵的見解是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