Python的交叉編譯移植至arm板


雖然網上有那么多python的交叉編譯移植教程,但是方法差異蠻大,需要根據實際開發板的型號做調整,以下是適用於海思的板子移植過程。

step 1. python版本從網上下就可以;

step 2. 解壓;

step 3. 新建一個目錄用以編譯pc版python,再編譯pgen出來,用於生成語法解析器;

mkdir build.pc
cd build.pc
../configure
make

cd..

step 4. 配置 和編譯CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++ ./configure --host=arm-linux  --prefix=/home/jhb/nfs/Python-2.7.3/python_install

step 5.

修改setup.py
detect_modules函數:
函數的前兩行是把/usr/local加到搜索目錄中,我們的cross compiler一般不會直接安裝在 /usr/local里面的,所以這兩行去掉:
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')

step 6. 

之后就要對Makefile做一些修改:
(1)把
# OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
一行中,去掉-g,我們不要debug python,-O3改為-O2,空間緊張O2就可以了。
(2)在:
PGEN= Parser/pgen$(EXE)
一行的下面加上:
PGEN_HOST= build.pc/Parser/pgen$(EXE)
表明我們在HOST上運行的pgen。
(3)在要使用PGEN的地方改為PGEN_HOST:
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
改為:
$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
(4)修改所有使用新生成的python的地方。
在BUILDPYTHON變量下面定義一個變量:PYTHON_HOST=build.pc/python$(EXE),然后將所有./$(BUILDPYTHON)的地方都換成./$(PYTHON_HOST)。

step 7. make 會出現錯誤

Include/pyport.h:243: error: #error "This platform's pyconfig.h needs to define PY_FORMAT_LONG_LONG"
修改pyconfig.h: 找到#undef PY_FORMAT_LONG_LONG 處加:#define PY_FORMAT_LONG_LONG "ll"

make test

make install

step 8. 此時在開發板上./python可以運行。

step 9. 設置環境變量

export PYTHONHOME=/root/xbmc/python_install-test
export PYTHONPATH=$PYTHONHOME:$PYTHONHOME/lib/python2.7:$PYTHONHOME/lib:$PYTHONHOME/lib/python2.7/site-packages
export PATH=$PATH:$PYTHONHOME:$PYTHONPATH

 

移植python的目的是為了使用一個叫speedtest的網速測試工具,它使用python 腳本語言編寫,linux上測試網速的工具很多,但是適用於開發板的卻少的可憐,因此需要移植python來支持speedtest。

參考於 : http://blog.csdn.net/heqiangflytosky/article/details/8875561


免責聲明!

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



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