Python 交叉編譯

Python 交叉編譯

情況說明
自己想要在Windows 虛擬機Ubuntu18.04 中編譯python解釋器,以移植到ARM平臺上執行,主要目標是在ARM QEMU中進行執行。
編譯環境:Ubuntu 18.04
編譯器:gcc, arm-linux-gnueabi
Python版本:2.7.3 和 3.5.5

整個過程分爲三個步驟

  1. 編譯生成當前平臺該版本的python
  2. 給低版本python2.7.3 打上交叉編譯的補丁,其中高版本python沒有交叉編譯的補丁(忘記在哪篇文章看到過這句話,囧)
  3. 交叉編譯生成目標機ARM上的python

參考鏈接

  1. https://www.cnblogs.com/tolimit/p/4519838.html
  2. http://idiip.jiinii.com/cross-compile-python-3.html

詳情

步驟一:

進入python源碼目錄,執行

./configure

編譯當前平臺該python版本對應的python和Parser/pgen
( 源碼根目錄下生成 python 可執行文件, Parser/目錄下生成pgen 可執行文件)

make python Parser/pgen

將當前平臺對應的python 可執行文件備份爲python_for_build

mv python python_for_build

將當前平臺的pgen可執行文件備份爲pgen_for_build

mv Parser/pgen Parser/pgen_for_build

清理當前源碼目錄下編譯好的項目文件(清除makfile等相關文件),爲交叉編譯生成目標平臺的python文件做準備

make distclean

給Python 源碼打上交叉編譯補丁

低版本python2.7.3 是有交叉編譯補丁的。根據tolimit的博客,以下版本是有補丁的,其他版本不確定。自己只針對python2.7.3 進行補丁驗證。鏈接部分失效,需要的話,請自行Google。Python patch
進入python源碼目錄,執行

patch -p1 < Python-2.7.3-xcompile.patch

顯示如下,則表示打補丁成功
補丁成功

交叉編譯python

配置
CC爲指定C交叉編譯器,我的是arm-linux-gnueabi-gcc
CXX爲指定C++交叉編譯器,我的是arm-linux-gnueabi-g++
AR爲ar工具,我的是arm-linux-ar
RANLIB爲ranlib工具,我的是arm-linux-gnueabi-ranlib
Host爲目標主機,我這裏設置的是arm-linux-gnueabi
Build爲編譯環境主機,我的是x86_64-linux-gnu
Prefix爲安裝位置

我的整個配置命令如下:

CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib ./configure --host=arm-linux-gnueabi --build=x86_64-linux-gnu --prefix=/home/hui/Cross_compile/python-arm/

編譯
HOSTPYTHON指定我們之前編譯的python文件
HOSTPGEN指定我們之前編譯的pgen文件
我的整個編譯命令如下:

make HOSTPYTHON=./python_for_build HOSTPGEN=./Parser/pgen_for_build BLDSHARED="arm-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux-gnueabi BUILDARCH=x86_64-linux-gnu

安裝

make install HOSTPYTHON=./python_for_build BLDSHARED="arm-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=/home/hui/Cross_compile/python-arm

最後在prefix 指定的目錄下會有新生成的文件和文件夾,主要文件夾是/bin, /include, /lib, /share。 把他們複製到目標機器/usr 目錄下(QEMU ARM可能需要配置環境變量 export PATH=$PATH:/usr/lib/)。最後,在目標機器上執行以下命令檢查python環境是否完整。

python /usr/lib/python2.7/test/test___all__.py
# 必須鍵入完整絕對路徑
發佈了7 篇原創文章 · 獲贊 1 · 訪問量 9331
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章