用python交叉编译gdb for arm失败了

时间:2015-11-04 02:07:43

标签: python linux android-ndk cross-compiling

我想在Android机器等设备上调试ARM应用程序,我更喜欢使用gdb(ARM版本)而不是gdb与gdbserver进行调试,因为有一个dashboard,一个用于Python的GDB可视化界面。 / p>

它必须在设备上与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>

关键是,x86_64-linux-gnu/python2.7/pyconfig.h中我只有/usr/include,我该如何获得arm-linux-gnueabi/python2.7/pyconfig.h?我已经apt-get install python2.7-dev

1 个答案:

答案 0 :(得分:11)

我在尝试交叉编译使用SWIG构建的python包装器模块时遇到了这个问题,但在我看来,任何人都会在Debian系统上交叉编译python链接的C代码。

显然Debian python-dev包没有设置头文件以方便交叉编译,但是可以手动获取它们。我不确定这是一个python bug还是Debian包bug,我还没有研究它是否适用于其他发行版。

pyconfig.h设置预处理器定义,告诉python源代码关于平台依赖的东西,如字节序和数据类型大小,所以正确编译python源肯定需要正确的pyconfig.h。幸运的是,pyconfig.h文件应该是你需要单独获取的唯一文件,它可以从你的目标平台的Debian python-dev软件包中获得。

您可以从https://packages.debian.org/jessie/libpython2.7-dev下载armeabi或任何其他架构的软件包文件并自行解压缩include目录,或者您可以使用以下命令下载软件包并将armeabi的相应文件复制到/ usr /本地/包括

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更好,并冒着你的更改冒险被OS淘汰了

相关问题