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 설치 프로세스를 완료하려면 gdb makeinfo
도 설치해야 했습니다. makeinfo 설치 명령은 sudo yum install texinfo
.
전반적으로 올바른 단계 세트는 다음과 같습니다.
Python-devel 설치
텍스인포 설치
gdb 소스를 다운로드하고 gunzip으로 압축을 푼 다음 압축을 풉니다.
cd
gdb-7.9
파일이 있는 디렉토리 로 이동합니다configure
.-
./configure --prefix=/usr --with-python make sudo make install
gdb가 Python 3과 작동하도록 하는 것이 가능해야 합니다. 다양한 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