把 Python 移植到 arm 上

我的这个需求,其实是将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

   简单执行一下,看一下版本

   没啥问题,能执行,没有库依赖,剩下的就是脚本包了

我先去休息下

原文地址:https://www.cnblogs.com/suanguade/p/15787905.html