我想在 Android 机器等设备上调试 ARM 应用程序,我更喜欢使用 gdb(ARM 版本)而不是 gdb 和 gdbserver 来调试,因为有一个 dashboard ,Python 中 GDB 的可视化界面。
在设备上必须配合gdb(ARM版),所以我需要用python交叉编译一个ARM版的gdb,使用命令如下:
./configure --host=arm-linux-gnueabi --target=arm-linux-gnueabi --with-python=/usr/bin
但最后出现了错误信息:
configure:8096: checking whether to use python
configure:8098: result: /usr/bin/
configure:8316: checking for python2.7
configure:8334: arm-linux-gnueabi-gcc -o conftest -g -O2 -I/usr/include/python2.7 -I/usr/include/python2.7 conftest.c -ldl -ltermcap -lm -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions >&5
In file included from /usr/include/python2.7/Python.h:8:0,
from conftest.c:50:
/usr/include/python2.7/pyconfig.h:15:52: fatal error: arm-linux-gnueabi/python2.7/pyconfig.h: No such file or directory
compilation terminated.
然后我在/usr/include/python2.7/pyconfig.h
中找到第15行,如下:
# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
#include <arm-linux-gnueabi/python2.7/pyconfig.h>
重点来了,我在/usr/include
里面只有x86_64-linux-gnu/python2.7/pyconfig.h
,怎么才能得到arm-linux-gnueabi/python2.7/pyconfig.h
?我已经 apt-get install python2.7-dev
。
最佳答案
我在尝试交叉编译使用 SWIG 构建的 python 包装器模块时遇到了这个问题,但在我看来,任何在 Debian 系统上交叉编译 python 链接的 C 代码的人都会遇到这个问题。
显然,Debian python-dev 包没有设置头文件来促进交叉编译,但可以手动获取它们。我不确定这是 python 错误还是 Debian 软件包错误,我还没有研究它是否适用于其他发行版。
pyconfig.h 设置预处理器定义来告诉 python 源代码有关平台相关的事情,例如字节序和数据类型大小,因此正确编译 python 源代码肯定需要正确的 pyconfig.h。幸运的是,pyconfig.h 文件应该是您需要单独获取的唯一文件,它可以从目标平台的 Debian python-dev 包中获得。
您可以从https://packages.debian.org/jessie/libpython2.7-dev 下载armeabi 或任何其他架构的包文件。并自行解压 include 目录,或者您可以使用以下命令下载软件包并将 armeabi 的适当文件复制到/usr/local/include
wget http://security.debian.org/debian-security/pool/updates/main/p/python2.7/libpython2.7-dev_2.7.9-2+deb8u2_armel.deb
dpkg -x libpython2.7-dev_2.7.9-2_armel.deb libpython2.7-dev_2.7.9-2_armel_extracted
sudo cp -r libpython2.7-dev_2.7.9-2_armel_extracted/usr/include/arm-linux-gnueabi/ /usr/local/include/
rm -r libpython2.7-dev_2.7.9-2_armel*
请注意,在某些交叉编译器上,如果它默认不搜索此位置,则必须将 -I/usr/local/include
添加到编译器选项,但对我来说,这比修改/usr/include 并冒着更改被操作系统清除的风险
关于python - 用 python 为 arm 交叉编译 gdb 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512541/