Python サポートで GDB7.8 をコンパイルできない

Python サポートで GDB7.8 をコンパイルできない

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

全体的に、正しい手順は次のようです

  1. python-develをインストールする

  2. texinfoをインストールする

  3. gdb ソースをダウンロードし、gunzip して untar します。

  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

恩恵を受けてピーター・シェーファーの素晴らしい回答、私はPython 3.6でGDB 8.3.1をソースからビルドしてインストールすることができました。重要な洞察は、およびLDFLAGSLIBS受け入れる./configureということです。異なるおよびLDFLAGSが必要LIBSですmake。はい、それらは同じであるはずですが、この場合はそうではありませんでした。


前提条件の手順

  1. python3パッケージをインストールする

  2. python3-develパッケージをインストールする

  3. texinfoパッケージをインストールする

  4. 実行します/usr/bin/python3.6-config --includes。これは(2回)印刷されます。

    -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. 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

関連情報