交叉编译移植Python到arm架构下的Linux系统

参考:https://blog.csdn.net/weixin_41922484/

   https://blog.csdn.net/qq_28351465/article/details/54406180

     https://cloud.tencent.com/developer/article/1570901?from=15425

  编译环境:ubuntu-12.0.4

  编译器:gcc arm-arago-linux-gnueabi

  Python版本:3.8.0

  Python安装包文件名:Python-3.8.0.tgz

  整个过程分为三大步骤:

      1. 直接编译python,生成Python解释器,如果你的编译系统没有对应的Python你还需要按照对应的Python,不然会缺失编译环境

      2. 交叉编译python

      3. 复制可移植文件到arm文件系统

一、具体步骤:

  1、源码下载

​wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
xz-d Python-3.8.3.tar.xz
tar -xvf Python-3.8.3.tar.xz
cd Python-3.8.3

  如果PC上预先没有 python3.8 的版本,则需要编译安装3.8的PC版本,安装步骤可参考:https://www.cnblogs.com/xingboy/p/16579824.html

  接着编译 python Pareser/pgen ,生成 Python 解释器

    ./configure

    make

  2、在Python-3.8.0目录下新建mylib文件夹,用于存放生成的可移植文件:

    命令:mkdir mylib

  3、新建一个参数设置脚本,该脚本主要配置一些编译参数 vim  myPythonMake.sh

#!/bin/sh
CC=arm-linux-gnueabihf-gcc \    # CC为指定C交叉编译器,可查看你的交叉编译器的bin文件夹得知
CXX=arm-linux-gnueabihf-g++ \  # CXX为指定C++交叉编译器,可查看你的交叉编译器的bin文件夹得知
AR=arm-linux-gnueabihf-ar \    # AR为ar工具,可查看你的交叉编译器的bin文件夹得知
RANLIB=arm-linux-gnueabihf-ranlib \  # RANLIB为ranlib工具,可查看你的交叉编译器的bin文件夹得知
./configure \      # 执行编译配置指令
         --host=arm-linux-gnueabihf \  # Host为目标主机,也就是准备安装平台的编译器去掉 -gcc
         --build=x86_64-linux-gnu \    # Build为编译环境主机,也就是你的编译机器的交叉编译器,可执行 gcc -v 命令查看,我这里看得的是 Target: x86_64-linux-gnu
         --disable-ipv6 \     # –disable-ipv6 禁用ip6
         --prefix=/home/aplex/myPython3.8/Python-3.8.0/mylib \    # Prefix为安装位置,就是你交叉编译完 python 后的文件保存位置
         ac_cv_file__dev_ptmx=no \  # 从目标板即arm板上的/dev下查看是否有ptmx设备,有的话就是yes,没有就是no
         ac_cv_file__dev_ptc=no    # 从目标板即arm板上的/dev下查看是否有ptc设备,有的话就是yes,没有就是no

  4、编写开始编译脚本,配置编译参数 vim myMakePython.sh

#!/bin/sh
make \
    HOSTPYTHON=./python \    # HOSTPYTHON 指定我们之前编译的X86版本的python文件
    HOSTPGEN=./Parser/pgen \ # HOSTPGEN 指定我们之前编译的X86版本的pgen文件
    BLDSHARED="arm-linux-gnueabihf-gcc -shared" \
    CROSS_COMPILE=arm-linux-gnueabihf- \
    CROSS_COMPILE_TARGET=yes \
    HOSTARCH=arm-linux-gnueabihf \
    BUILDARCH=x86_64-linux-gnu

  5、编写安装脚本,配置安装参数 vim myPythonInstall.sh

#!/bin/sh
make install HOSTPYTHON=./python \
    BLDSHARED="arm-linux-gnueabihf-gcc -shared" \
    CROSS_COMPILE=arm-linux-gnueabihf- \
    CROSS_COMPILE_TARGET=yes \
    prefix=/home/aplex/myPython3.8/Python-3.8.0/mylib

  6、复制 mylib 目录下文件到你要移植的 arm 文件系统即可,具体的移植环境配置可参考上述步骤1的安装步骤:https://www.cnblogs.com/xingboy/p/16579824.html

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

二、报错总结:

  1、checking for python interpreter for cross build... configure: error: python3.8 interpreter not found

    主要报错原因是本地PC上无3.8的python版本。

  2、安装时报错ModuleNotFoundError: No module named '_ctypes'的解决办法   

    2.1、执行如下命令: 

yum install libffi-devel  //安装 libffi-devel

    2.2、从"./configure ..."重新安装

  3、pip3 install时报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.”

    先安装openssl-dev,然后重新编译安装,只是在编译的过程中加入 --enable-optimizations

Ubuntu:
    
    sudo apt-get install libffi-dev

或者:

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get dist-upgrade 
    sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
    sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
    sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev 
    sudo apt-get install libssl-dev openssl 
    sudo apt-get install libffi-dev

 

posted @ 2022-09-07 17:18  白菜没我白  阅读(2896)  评论(0编辑  收藏  举报