交叉编译Python3.6-程序员宅基地

技术标签: 嵌入式  

现如今python是一门非常火热的语言了,由于python的底层是C语言写的,所以只要对python源码进行交叉编译,那么python也可以运行在嵌入式linux平台下,这样就python在嵌入式开发领域也可以大放光芒了。

本教程使用的Python版本是3.6.8,方法同样也适用于Python3.6的其它版本(如3.6.5等),可以说是屡试不爽。


一 准备

我们是在ubuntu18.04 64位虚拟机下进行交叉编译,这里要注意的是要确保Linux下已经安装了Python3.6,因为交叉编译过程中要用到Python3.6的解释器,所以如果没有要自己安装下,ubuntu18.04自带python3.6,就不用去安装了。

另外去对应网站下载以下4个包,并传到虚拟机中(可以使用winscp传),这些软件版本可以不用完全按照下面这样,只要保证能通过交叉编译就可以了。

  • Python3.6.8.tgz
  • openssl-1.1.1b.tar.gz
  • zlib-1.2.11.tar.gz
  • gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz (去linaro官网下载)

这里要注意下,交叉编译器要和编译嵌入式linux的交叉编译器一致,否则运行时可能会有问题。

传入后解压,如下
在这里插入图片描述

安装交叉编译器

安装交叉编译器可以参照我的另一篇文章《为pcDuino构建启动镜像》,里面有讲如何安装,也就是解压和配置环境变量,很简单。配置好后在终端下输入arm-linux-gnueabihf-gcc -v,会打印交叉编译器的版本信息,
在这里插入图片描述


二 操作

打开终端,输入以下命令对环境变量进行配置,

  • CC=arm-linux-gnueabihf-gcc
  • CXX=arm-linux-gnueabihf-g++
  • LD=arm-linux-gnueabihf-ld
  • AR=arm-linux-gnueabihf-ar
  • STRIP=arm-linux-gnueabihf-strip
  • RANLIB=arm-linux-gnueabihf-ranlib
1. 交叉编译openssl

在配置好的终端下,cd到openssl-1.1.1b的源码目录下,
在这里插入图片描述
然后输入以下命令进行配置,

./config no-asm no-shared --prefix=/home/wh/ePython/openssl-1.1.1b/install

prefix是指定编译好openssl后的lib安装目录。

经过上述命令会生成Makefile,然后打开Makefile,找到CROSS_COMPILE的定义,
在这里插入图片描述
把CROSS_COMPILE的值改为空,
在这里插入图片描述
然后查找‘-m64’这个option并删除掉。

最后输入make & make install进行编译和安装,完毕后在install目录下看到有如下文件,
在这里插入图片描述
注意,不同openssl版本可能遇到的问题不一样,大家具体问题具体对待,都可以解决的。

2. 交叉编译zlib

cd到zlib-1.2.11目录下,
在这里插入图片描述
输入以下命令进行配置

./configure --prefix=/home/wh/ePython/zlib-1.2.11/install

配置完后会生成Makefile,然后输入make & make install来进行编译和安装,最后在install目录下看到有如下文件,
在这里插入图片描述

3. 交叉编译Python3.6.8

cd到Python源码目录下,
在这里插入图片描述
输入以下命令进行配置,

./configure --host=arm-linux-gnueabihf --build=arm --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no --prefix=/home/wh/ePython/PythonInstall

配置过程中有这句话,
在这里插入图片描述
这就是为什么前面提到虚拟机里需要预先安装好python3.6。

配置完后,在当前路径下,打开Modules/Setup.dist,

  • 添加交叉编译好的openssl路径。添加前如下,
    在这里插入图片描述
    添加后如下,
    在这里插入图片描述
  • 添加交叉编译好的zlib路径。添加前如下,
    在这里插入图片描述
    添加后如下,
    在这里插入图片描述

然后输入make & make install进行编译安装。

过程中可能会遇到如下问题,
subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.
执行命令rm -rf /usr/bin/lsb_release可以解决这个问题,此时需要make clean下,然后再次执行make & make install进行编译安装。

安装好后在/home/wh/ePython/PythonInstall目录下可以看到有如下文件,
在这里插入图片描述


三 移植

把PythonInstall压缩然后传到嵌入式环境中解压,解压后在嵌入式终端下进入PythonInstall/bin目录,然后执行./python3,可以看到起作用了,这样就移植成功了。


四 总结

本教程主要讲述如何交叉编译Python3.6,相信其它版本的Python交叉编译也是类似的,交叉编译过程中使用了openssl,这个库是用于网络开发的,也可以不用。

如果有写的不对的地方,希望能留言指正,谢谢阅读。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/whahu1989/article/details/86482669

智能推荐

cacti结构浅析_cacti 表结构-程序员宅基地

文章浏览阅读8.4k次。cacti前端构成1 index页面2 include_auth_php3 include_top_header_php4 include_bottom_footer_php5 global_php页面6 总结7 附录71随笔72常用function总结待添加1 cacti前端构成cacti首先进入的就是index页面,所以从index页面看起。1.1 index页面简单来看大致结_cacti 表结构

色环电阻_电阻色环 csdn-程序员宅基地

文章浏览阅读742次。之前一直觉得色环电阻中读取色环是一件麻烦事,不如直接测量方便。但是这两天因为需要一个31千欧的电阻,于是用万用表测量了很多电阻,然后突然对通过色环阅读电阻阻值有了点想法,更新了一波认知,原来色环阅读电阻阻值根本没想象中的那么麻烦和费力,主要是色环的表格真的不用刻意去记忆,多阅读几遍就记下来了,为了以后可以快速找到,就在此记录一下吧,下面是一个虽然项目略多但是阅读起来很容易的表格:在拿到一个电阻时,首先找金、银这样的颜色,然后就可以确定这是色环的末尾部分,接下来就可以从头根据颜色和每一位对应的意义来判_电阻色环 csdn

Oracle PL/SQL自学(五):替代变量与绑定变量_plsql developer 替换变量-程序员宅基地

文章浏览阅读2.1k次。1.替代变量与绑定变量之前在学习变量声明与使用这一章节时,发现替代变量与绑定变量的内容比较多,可以写的内容远远不止书本上的那些,遂决定单独写一篇文,对这两种变量的使用做一个大概的总结。前文链接: Oracle PL/SQL自学(四):PL/SQL变量的声明与使用.2.替代变量在学习到替代变量前,我们发现当每次要查找不同的数据时,我们都要对代码段进行修改,如果放到实际工作中,这种操作方法会极..._plsql developer 替换变量

Linux之文件解压缩_linux 解压-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏3次。Linux之文件解压缩,tar,cpio,gz,xz,bz2,zip 解压和压缩_linux 解压

插件安装-gradle Windows 安装_gradle插件安装-程序员宅基地

文章浏览阅读155次。#1.前置条件JDK或JRE7以上#2.安装步骤(1)下载最新的Gradle压缩包Gradle官网:https://gradle.org/最新版本下载地址:https://gradle.org/releases/,下载binary-only(2)解压到指定位置,比如:D:\env\(3)配置环境变量右键计算机->属性->高级系统设置->环境变量,在系统变量区域,点击新建,输入变量名为:GRADLE_HOME,变量值为:D:\env\gradle。找到Path,在原始内容基_gradle插件安装

数据库系统概念:CH8 规范化理论_数据库系统-规范化理论-程序员宅基地

文章浏览阅读515次。CH8 Relational Database Design关系数据库设计目标:生成一组关系模式,存储信息时避免不必要的冗余,可以方便的获取信息。本章概览{基于函数依赖关系数据库设计的规范方法函数依赖+数据依赖−>定义范式本章概览\begin{cases}基于函数依赖关系数据库设计的规范方法\\函数依赖+数据依赖->定义范式\end{cases}本章概览{基于函数依赖关系数据库设计的规范方法函数依赖+数据依赖−>定义范式​8.1 好的关系设计的特点8.1.1 设计选择_数据库系统-规范化理论

随便推点

下载video标签内经blob加密的src资源_video blob-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏13次。起因:看到网易云上的MV,想下载但是F12后发现video标签内src链接是blob加密后的,没有源地址,怎么办呢?经过网上查询,找到了一种方法。如图所示,视频链接用blob方法加密。方法:编辑video标签,将链接放入到a标签内获取源地址。如图:确定后网页即会自动获得源地址(src),如图:..._video blob

系统设计.短链系统设计-程序员宅基地

文章浏览阅读863次。301永久重定向,即浏览器只需要第一次请求拿到长链接后,下次再去访问这个短链就不会向短网址服务器请求了,而是直接从浏览器的缓存里拿。302临时重定向,即每次访问短链都会去请求短网址服务器(除非响应中用Cache-Control或Expired暗示浏览器缓存),这样就便于server数据监控,所以虽然用302会给server增加一点压力,但明显是利大于弊的。根据短链获取长链或者根据长链获取短链使用类似HashMap的get算法,先根据HashCode查询,然后再根据短链文本查询。..._短链系统设计

Cython— 颜色量化(255*255*255 颜色量化转成 12*12*12)-程序员宅基地

文章浏览阅读1.4k次。这里的颜色量化加速版本。【原文请查看】。主要是用于显著性检测。将255*255*255=16581375 颜色量化转成 12*12*12=1728。优化方向一代码能跑通,但是有点问题,待修改%%cython --cplus --annotatefrom cpython cimport arraycimport numpy as npimport numpy as npimport ..._255*255*255

MATLAB批量处理.nii文件----批量.nii转为jpg格式_matlab把nii-程序员宅基地

文章浏览阅读864次。MATLAB批量处理.nii文件----批量.nii转为jpg格式_matlab把nii

Adams&matlab联合仿真_matlab/simulink与adams按adams脚本联合仿真-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏46次。解决adams与matlab联合仿真的入门问题_matlab/simulink与adams按adams脚本联合仿真

向solr中导入数据库数据时遇到的一些问题_solr全量导入数据刷新后有数据被删除-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏2次。刚接触solr,在跟着别人的教程向solr中导入数据库数据时出现了好多坑,忙活了一下午。。。前面的配置都没问题,但是在导入的时候,Fetched和Processed都是零这个问题应该是数据库没有返回数据,首先先检查一下在data-config.xml中的sql语句有没有写正确(可以自己在别处试一下sql语句)。如果确定没问题,但还是没有解决。那应该就是JDBC驱动的问题,有可能是版本的问题,..._solr全量导入数据刷新后有数据被删除

推荐文章

热门文章

相关标签