为ARM交叉编译Python时出错

时间:2013-12-31 20:50:40

标签: python python-3.x arm cross-compiling

我正在尝试在this guide之后为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

要注意的一些事情。

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

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

         

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

         

    无法构建这些模块:   _tkinter

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

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

2 个答案:

答案 0 :(得分:1)

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

从您喜欢的任何项目中打开手臂chroot,例如arch linux arm,raspbian等。

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

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

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

在proc中为binfmt添加magic hex。 DebianGentoogenricList of magic hex sequences的说明。以下是我的设置:

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

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

享受你的虚拟手臂!

答案 1 :(得分:0)

我得到了同样的错误并且忽略了它并继续执行的程序 http://randomsplat.com/id5-cross-compiling-python-for-embedded-linux.html

它与hello_world程序一起使用。您还可以从_install/lib/Python2.7/文件夹运行testall.py文件。 你也可以参考 http://whatschrisdoing.com/blog/talks/PyConTalk2012.pdf