• 交叉编译移植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
  • 相关阅读:
    LA3523 二分图和点双连通分量的综合性质及证明
    LA4127计算几何+离散化+点覆盖
    LA 4728凸包算法-旋转卡壳的直径
    UVA 11168凸包+距离公式
    UVA 10652凸包+面的旋转
    UVA10969计算几何+交叉圆形成的圆弧长
    LA3485二分+求解积分方程+辛普森算法计算积分
    LA5009三分法
    UVA10341幂函数零点的通解分析
    UVA11524构造系数数组+高斯消元解异或方程组
  • 原文地址:https://www.cnblogs.com/xingboy/p/16562726.html
Copyright © 2020-2023  润新知