ubuntu14.04交叉编译移植python2.7.3

第一步:编译X86版本PYTHON

进入python源码目录,执行:

./configure

编译python和Parser/pgen

make python Parser/pgen

将X86版本的python可执行文件备份为python_for_build

mv python python_for_build

将X86版本的pgen可执行文件配备为pgen_for_build

mv Parser/pgen Parser/pgen_for_build

清理编译好的项目文件,这一步是为了后面的交叉编译做准备

makedistclean

整个步骤最重要的就是保存好python和pgen这两个可执行文件,因为之后在交叉编译Python时需要用到这两个文件。

第二步:给python源码打上交叉编译补丁

我的python版本是2.7.3,所以补丁也需要打上对应的版本补丁,

Python-2.6.6-xcompile.patch

Python-2.7.2-xcompile.patch

Python-2.7.3-xcompile.patch

Python-3.1.1-xcompile.patch

Python-3.1.2-xcompile.patch

Python-3.1.3-xcompile.patch

Python-3.2.2-xcompile.patch

共享在我的云盘里http://pan.baidu.com/s/1cJ1c7s

进入python源码目录,执行

patch -p1 < Python-2.7.3-xcompile.patch

这时显示如下,则表示打补丁成功

第三步:交叉编译python

配置
  • CC为指定C交叉编译器,
  • CXX为指定C++交叉编译器,
  • AR为ar工具
  • RANLIB为ranlib工具
  • Host为目标主机
  • Build为编译环境主机
  • Prefix为安装位置

配置命令如下:(32位就是build=x86-linux-gnu64位就是build=x86_64-linux-gnu )

CC=arm-linux-gccCXX=arm-linux-g++AR=arm-linux-arRANLIB=arm-linux-ranlib./configure--host=arm-linux --build=x86_64-linux-gnu--prefix=/opt/python-arm/

自己机器上对应的参数修改一下

编译

  • HOSTPYTHON指定之前编译的X86版本的python文件
  • HOSTPGEN指定之前编译的X86版本的pgen文件

编译命令如下(不同编译器需要修改相应的arm-linux位置):

makeHOSTPYTHON=./python_for_buildHOSTPGEN=./Parser/pgen_for_buildBLDSHARED="arm-linux-gcc-shared"CROSS_COMPILE=arm-linux- CROSS_COMPILE_TARGET=yesHOSTARCH=arm-linux BUILDARCH=x86_64-linux-gnu

安装

同编译,具体如下:

makeinstallHOSTPYTHON=./python_for_buildBLDSHARED="arm-linux-gcc-shared"CROSS_COMPILE=arm-linux- CROSS_COMPILE_TARGET=yes --prefix=/opt/python-arm/

最后会在prefix指定的目录下有新生成的文件和文件夹,主要文件夹是/bin,/include,/lib,/share。把他们都复制到目标机器的/usr目录下。最后在目标机上执行一下命令可以检查python环境是否完整。

python/usr/lib/python2.7/test/test___all___.py

常见错误

按以上方法进行移植时我没有遇到错误,但是之前我按其他方法进行移植时遇到了一下错误,这里记录一下。

  • 编译时遇到过如下错误
#error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG"

编辑pyconfig.h文件,找到#undef PY_FORMAT_LONG_LONG,添加一行#define PY_FORMAT_LONG_LONG “ll”

  • 在目标机器上运行test时遇到如下错误
'import site' failed; use -v for traceback Traceback (most recent call last): File "test.py",line 2,in <module> import os ImportError: No module named os

在执行的过程中发现所有的python自带的py/pyc库文件找不到,是由于PYTHONHOME指定的路径有问题,和PYTHONHOME下文件架构有问题,一定为:${PYTHONHOME}/lib/python2.7。一般我们将编译好的文件夹(bin,lib,include,share)直接复制到usr下,是没有这个问题的(PYTHON库会放到/usr/lib/python2.7里面)。

相关文章

文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预...
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载U...
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装...
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standa...
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主...