【发布时间】:2014-01-18 17:25:37
【问题描述】:
我正在尝试为 ARM 编译 Python(版本 3.1.3),遵循this guide。
这些是我发出的命令(在 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
有几点需要注意。
- 执行第一个命令时,如果--host设置为arm-linux,命令不会执行,告诉我应该使用'--host'进行交叉编译。这就是为什么我没有将其设置为任何内容。
- 运行第二行时,我得到 li>
配置:警告:缓存变量 ac_cv_host 包含换行符。 _ctypes 模块配置失败
Python 构建完成,但构建这些模块的必要位 没有找到: _curses _curses_panel _dbm
_gdbm _hashlib _sqlite3
_ssl bz2 ossaudiodev readline zlib 要找到必要的位,请查看 在 setup.py 中的 detect_modules() 中获取模块名称。未能构建这些模块: _tkinter
我在运行第三行时遇到了类似的错误,但我猜这是由于上面的命令不起作用。
我正在尝试看看是否有人可以帮助我解决它。
【问题讨论】:
-
您使用的是什么嵌入式 Linux 发行版?如果 Python 版本不重要,你可以选择Buildroot。它提供 Python 3.3。
-
我把它作为一个练习,CCing for busy-box
-
无论如何我都不是这方面的专家,但上次我不得不在 ARM(对于 QNX 操作系统)上进行交叉编译时,需要指定 --target 和 --host 的 ./configure 步骤, 我想。如果指定--target=arm-linux 和--host=arm-linux,--host 错误会消失吗?
-
在我看来,ARM 编译器没有找到编译这些扩展模块(_curses、_ssl、bz2 等)所需的头文件。或者找不到库......这些不是编译器的一部分;所以在任何情况下,您都需要从源代码为 ARM 构建所有这些库(并告诉 python 构建在哪里找到它们)或配置 python 以跳过这些模块。
-
如果我建议稍微回溯一下,在运行的 ARM 系统中本地编译比交叉编译更容易。为此,我喜欢在 QEMU 中构建 ARM 软件。这是一个快速入门指南。 xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way
标签: python python-3.x arm cross-compiling