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

tyr*_*000 6 python linux cross-compiling android-ndk

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

它必须在设备上与gdb(ARM版本)合作,所以我需要用python交叉编译一个ARM版本的gdb,使用的命令如下所示:

./configure --host=arm-linux-gnueabi --target=arm-linux-gnueabi --with-python=/usr/bin
Run Code Online (Sandbox Code Playgroud)

但最后出现了一条错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

然后我找到第15行/usr/include/python2.7/pyconfig.h,如下所示:

# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
#include <arm-linux-gnueabi/python2.7/pyconfig.h>
Run Code Online (Sandbox Code Playgroud)

这里是一点,我只有x86_64-linux-gnu/python2.7/pyconfig.h/usr/include,我怎么能得到arm-linux-gnueabi/python2.7/pyconfig.h?我已经apt-get install了python2.7-dev.

小智 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/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*
Run Code Online (Sandbox Code Playgroud)

请注意,在某些交叉编译-I /usr/local/include器上,如果默认情况下它不搜索此位置,则必须添加到编译器选项,但对我来说这比修改/ usr/include更好,并且冒着操作系统消除了更改的风险