【问题标题】:cross compiling gdb for arm with python failed用python交叉编译gdb for arm失败
【发布时间】:2023-03-16 08:05:01
【问题描述】:

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

【问题讨论】:

    标签: python linux android-ndk cross-compiling


    【解决方案1】:

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

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

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

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

    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 并冒着删除更改的风险要好由操作系统

    【讨论】:

    • 谢谢你。我实际上将 arm-linux-gnueabi 目录移动到 /usr/include/ 。把它放在 /usr/local/include 对我不起作用。不知道为什么......注意:对我来说,我正在使用 arm-linux-gnueabihf 另外,当前版本是 2.7.13 。我不确定-2和-4之间的区别。很容易在这里看到当前版本:http.us.debian.org/debian/pool/main/p/python2.7
    • @JJStiff 你明白了吗
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2015-06-11
    • 2011-05-20
    • 2013-05-31
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多