参考: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
标签:编译,Python,linux,dev,python,Linux,arm From: https://www.cnblogs.com/xingboy/p/16562726.html