虽然网上有那么多python的交叉编译移植教程,但是方法差异蛮大,需要根据实际开发板的型号做调整,以下是适用于荔枝派Nano的板子移植过程。

  • 下载python3.5源码
  • 准备一个Ubuntu16.04环境,虚拟机 or 实体机均可
  • 编译前的预准备

第一步,将源码首先编译一遍,因为需要用到一些Python的解释模块,需要提前生成

cd Python3.5.2
mkdir prebuild
cd prebuild
./configure
make
cd ..

第二步,进行交叉编译的环境设置,请注意,荔枝Nano交叉编译器,用的arm-linux-gnueabi-gcc,版本是gcc 5.4.0,在这里,我们需要创建一个空文件夹,用于指定编译好的Python,安装位置,再/opt下创建一个python3的文件夹,然后执行如下命令

sudo mkdir /opt/python3

./configure CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ AR=arm-linux-gnueabi-ar RANLIB=arm-linux-gnueabi-ranlib --host=arm-linux-gnueabi --build=x86_64-linux-gnu --target=arm-linux-gnueabi --disable-ipv6 --prefix=/opt/python3 --with-ensurepip=yes --enable-optimizations ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes

第三步,进行一些关键文件的修改

  • 源码目录下的setup.py,将如下注释掉,不需要检索这个目录。
if cross_compolile:
    add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
    add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
  • Makefile文件
OPT= -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
改为
OPT= -DNDEBUG -fwrapv -O2 -Wall -Wstrict-prototypes
  • PGEN更改
PGEN= Parser/pgen$(EXE)
#这儿新增
PGEN_HOST= build.pc/Parser/pgen$(EXE)

$(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)
  • BUILDPYTHON更改
BUILDPYTHON 的定义处
该处下面增加如下代码

PYTHON_HOST=build.pc/python$(EXE)

然后全局搜索  ./$(BUILDPYTHON)
改为         ./$(PYTHON_HOST)
  • 偶现错误:
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

sudo make install

 

第五步:

将/opt/python3下的文件,拷贝到arm板子上,设置好PATH路径,PYTHONHOME 和 LIB路径,开始运行Python吧

效果图:

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐