Python サポート付きの GDB7.8 をインストールしようとしています。ソース フォルダーから、./configure --with-python
--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
--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 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 して untar します。
cd
gdb-7.9
ファイルのあるディレクトリにconfigure
。-
./configure --prefix=/usr --with-python make sudo make install
gdb を Python 3 で動作させることは可能なはずです。さまざまな gdb スクリプトやインストール プログラムでは、多くの場所で Python 3 について言及されています。ただし、現時点では、Python 3 で gdb をインストールする正しい手順はわかりません。
答え2
恩恵を受けてピーター・シェーファーの素晴らしい回答、私はPython 3.6でGDB 8.3.1をソースからビルドしてインストールすることができました。重要な洞察は、およびLDFLAGS
がLIBS
受け入れる./configure
ということです。異なるおよびLDFLAGS
が必要LIBS
ですmake
。はい、それらは同じであるはずですが、この場合はそうではありませんでした。
前提条件の手順
python3
パッケージをインストールするpython3-devel
パッケージをインストールするtexinfo
パッケージをインストールする実行します
/usr/bin/python3.6-config --includes
。これは(2回)印刷されます。-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
readlink --canonicalize-existing $(which python3)
;を実行して「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