把 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

 

   簡單執行一下,看一下版本

 

   沒啥問題,能執行,沒有庫依賴,剩下的就是腳本包了

 

我先去休息下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM