我的这个需求,其实是将Python,移植到一个安卓手机上,
这个安卓手机是arm的。
一直想做一个超低功耗的服务器,用什么来做,其实都很难,
后来我决定用手机来做,
用手机来做个服务器,功耗肯定低于那些所谓的啥网X云啥的。
之后,我用了一段时间,在网上花了45元钱,买了一部红米2A手机,2G+16G,1.5Ghz*4。
这个配置已经算是很牛逼了。
然后就有了本文,如何把 python 移植上去,
很尴尬的时候,python 官网没有提供arm 的安装包,
网上大多的资料都是自己编译python,然后移植,
我自然也这么做,
但是网上太多的教程,均无法完成这个需要,太尴尬,
经过自己一夜的摸索,终于找到了一套看似可行的方法,
说是看似可行,是因为 python 主程序编完了,也能在目标机器上运行,
但是还有一些其他的边角脚本没有打包到手机中,
不过不要紧,这里先只说明编译的过程。
准备步骤,首先需要准备如下环境,
1:一台Windows10系统的电脑,如果有Linux 系统的,也可以,但是不在本文考虑范围内
2:Windows10的电脑中安装了 wsl ,能启动一个ubuntu 子系统
3:下载,解压adb,能用就行
地址:https://developer.android.com/studio/command-line/adb
4:下载一个指定版本的python 源码,我这里使用的是 Python3.8.2
地址:https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
准备步骤结束,开始工作了
1:在wsl中先安装对应版本的python,由于是x86环境,所以直接安装x86的python即可。
如何安装随意。
2:在wsl中安装gcc for arm。
命令如下:
安装 arm gcc
apt-get install gcc-arm-linux-gnueabihf
安装 arm g++
apt-get install g++-arm-linux-gnueabihf
3:解压python 源码,随便放到什么地方
4:准备开始编译了,需要先config 一下,
命令如下:
./configure --build=x86_64-pc-linux-gnu --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no
命令大意:
build 环境是:x86_64-px-linux-gnu
目标执行环境是:arm-linux-gnueabihf
C语言编译器使用:arm-linux-gnueabihf-gcc
C++编译器:arm-linux-gnueabihf-g++
正常来说,有如上四个参数就可以配置了,但是过程中由于环境不同,可能出现各种不同的报错,
后面还有两个参数,就是根据目标环境中配置过程出现的错误而添加的,
有些特殊的环境可能还要添加命令支持 long long 等。
5:如上命令执行完之后,经过一系列的config,可以正常结束。
配置结束之后,不要着急make,有个地方需要改一下。
打开makefile 文件,找到如下类似的位置,增加参数
1 CC= arm-linux-gnueabihf-gcc -pthread --static 2 CXX= arm-linux-gnueabihf-g++ -pthread --static
对,就是在CC 和 CXX 后面,增加两个参数,
-pthread 参数是为了让编译结果不依赖pthread so,--static 是为了让编译结果不依赖任何 so
用途都是为了静态编译,
如果不这么做,那么会导致模块就算编译出来,到了手机中也无法运行。
6:如上makefile文件修改完了之后,
终于可以开始编译了。
直接make 即可。
7:等啊,等啊,一直等到最后,可以看到编译是可以成功的。
8:编译成功之后,当前目录下会出现一个叫做 python.exe 的文件。
为啥是 exe ,file一下
arm 版, 32 位程序,
看一下依赖,
dumpbin一下
没有依赖。
完美
9:adb push 到手机里面
之后拷贝到指定位置
chmod
简单执行一下,看一下版本
没啥问题,能执行,没有库依赖,剩下的就是脚本包了
我先去休息下