build static python (沒有動態載入so , 目前ARM不成功 )
有些教學說還要build 一個x86的Parser/pgen 才能成功build
但我用了反而有問題..
不過流程是從以下文章 變化的
1.到https://www.python.org/ 下載你要的版本source code
我用Ubuntu 16.04.5 , 內建python 3.5 , 但下載3.7 來build 會有問題
所以版號應該跟自身已裝的python 也有關
3.5.2
arm-linux-gnueabihf-gcc 的版本會影響到ARM上要裝的glibc 版本
2.解壓縮後進到目錄
3.輸入以下指令
4. config
5.修改Module/Setup
enable zlib => 找到 #zlib zlibmodule.c xxxxxx 這行,拿掉# (非必要)
enable ssl => # _ssl _ssl.c xxxx 這邊,拿掉#,上方有個SSL=/usr/local/lib 換成ARM 的位置(.so or .a)
enable shared => #*shared* ,拿掉# (非必要)
其他module 在shared 模式都是enable的
只有少數module 需要enable , 如ssl zlib
若需要enable 的就拿掉# 再注意link library 到ARM的版本
SSL 有可能遇到ARM預設的版本較舊,那建議這邊cross compile 改用靜態連結SSL ARM Lib 或者覆蓋掉ARM 上的SSL Lib
6. cross build zlib and openssl
zlib:
到 http://www.zlib.net/ 下載source code , 版本1.2.11
prefix 就看你arm 編譯器lib 位置
openssl:
注意python 3.5.2 最高匹配到1.0.2的openssl
以下只會產生.a 檔案
若要改成製作.so
修改Makefile CFLAGS 增加-fPIC
arm-linux-gnueabihf-ar -x libssl.a
arm-linux-gnueabihf-gcc -shared *.o -o libssl.so.1.0.2
(libcrypt 同上)
7.修改Makefile (非必要)
-s 去除多餘文件
-lrt 減少無用的錯誤訊息
8.make python
install 會將產物放到/opt/arm_python
這邊若成功會看到一堆rf -rf xxxxxx , 最後有個link 錯誤 就可以忽略
所以若ls /opt/arm_python 有檔案,就可以先試試看放到ARM上
9.打包
壓縮後用scp 傳到ARM上
ARM 上解壓縮放到目標目錄
修改python3 連結
設置PYTHONPATH 才能找到module
還要設置LD 找到/opt/arm_python/lib 目錄,才能連結到python3.5 要使用的某個.so
最後就是進到python3
測試import math , import ssl
還要確認是不是要手動再安裝SSL
我有先用apt-get install libssl-dev
其他第三方套件可以直接copy x86上dist-packages 的內容,放到剛剛PYTHONPATH的任意位置
但要注意版本,避免語法不同
基本上import math跟ssl 成功大概就沒問題,缺的module 就是去x86 copy就行了
Karl 的魔法書: Cross Compile Python >>>>> Download Now
回覆刪除>>>>> Download Full
Karl 的魔法書: Cross Compile Python >>>>> Download LINK
>>>>> Download Now
Karl 的魔法書: Cross Compile Python >>>>> Download Full
>>>>> Download LINK