为ARM交叉编译Python时出错

Bob*_*Bob 9 python arm cross-compiling python-3.x

我正在尝试按照本指南为ARM编译Python(版本3.1.3).

这些是我发布的命令(在Ubuntu 12上):

CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib ./configure --host --build=x86_64-linux-gnu --prefix=/python

make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes HOSTARCH=x86_64-linux-gnu BUILDARCH=x86_64-linux-gnu

make install HOSTPYTHON=./hostpython BLDSHARED="arm-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=~/Python-2.7.2/_install
Run Code Online (Sandbox Code Playgroud)

有几点需要注意.

  1. 执行第一个命令时,如果--host设置为arm-linux,命令将不会执行,告诉我应该使用'--host'进行交叉编译.这就是为什么我没有把它设置成任何东西.
  2. 在运行第二行时,我明白了

configure:警告:缓存变量ac_cv_host包含换行符.无法配置_ctypes模块

Python构建完成,但找不到构建这些模块的必要位:_curses _curses_panel _dbm
_gdbm _hashlib _sqlite3
_ssl bz2 ossaudiodev readline zlib要查找必要的位,请在detect_modules()中的setup.py中查找模块的名称.

无法构建这些模块:_tkinter

我在运行第三行时遇到类似的错误,但我想这是因为上面的命令不起作用.

我试图看看是否有人可以帮我修复它.

Dim*_*nek 1

QEMU本地编译比交叉编译容易得多。

从您喜欢的任何项目中解压 arm chroot,例如 arch linux arm、raspbian 等。

你已经获得了适用于arm的二进制python,但如果你真的想编译自己的:

下载 qemu-user-static (例如 debian 包),解压它。

将单个静态二进制文件安装到您的arm chroot 的根目录中。

将 magic hex 添加到 proc 中的 binfmt 中。DebianGentoogenric魔法十六进制序列列表的说明。以下是我的设置:

mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register
export QEMU_CPU=arm926
Run Code Online (Sandbox Code Playgroud)

根据需要,可以选择mount --bind/tmp、/proc、/sys。

享受你的虚拟手臂吧!