python - 用 python 为 arm 交叉编译 gdb 失败

标签 python linux android-ndk cross-compiling

我想在 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/

相关文章:

python - Q-学习模型没有改进

python - 使用 Python 脚本在 Power BI 中创建新列

linux - 如何在 linux 中打印另一个用户的当前工作目录?

linux - SO_TIMESTAMP 和 SO_TIMESTAMPING 软件时间戳的区别

Android:为什么 native 代码比 Java 代码快这么多

python - 数据描述符优先级在python中是如何工作的

javascript - appengine channel 没有消息到达

python - 拥有子进程允许 rpc-server 在子进程存活时重新启动

android - 汇编程序消息 : Branch out of range

c++ - STL端口错误: '__cxa_demangle' is not a member of 'abi' for boost library