编译Python2.7.3需要给Python2源码打上用于交叉编译的patch,从Python-3.3.1开始,就不需要再打什么patch了,只需要在configure的时候指定–build和–host参数即可
源码下载&解压
-
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
-
xz -d Python-3.6.6.tar.xz
-
tar xvf Python-3.6.6.tar
编译HOST解释器
同Python2一样,在交叉编译的时候需要在HOST PC上运行对应版本的Python程序,所以需要先编译HOST PC上面用的Python,下面是命令
-
cd Python-3.6.6/
-
./configure --prefix=$PWD/../_install_host --enable-shared
-
make -j2
-
make install
-
make distclean
注意:–prefix指定的目录不要放在Python-3.6.6目录里,因为执行make distclean
会清掉一些文件
把生成的HOST PC端的bin和lib,加到环境变量里面去,后续交叉编译就会自动找到python3了
-
export PATH=/home/xxx/board_nfs/python/_install_host/bin:$PATH
-
export LD_LIBRARY_PATH=/home/xxx/board_nfs/python/_install_host/lib:$LD_LIBRARY_PATH
验证HOST PC端的python3可用
配置交叉编译工具链
./configure --host=arm-hisiv600-linux --build=armv7 --prefix=$PWD/_install --enable-ipv6 --enable-shared ac_cv_file__dev_ptmx="yes" ac_cv_file__dev_ptc="no" LDFLAGS="-L/home/xxx/board_nfs/python/python_deps/lib" CPPFLAGS="-I/home/xxx/board_nfs/python/python_deps/include"
–host是交叉编译工具链
–build表示编译出来的程序运行的处理器,可在目标板cat /proc/cpuinfo
查到
这里我已经把zlib、sqlite3的lib和include添加上了,编译zlib、sqlite3可查看上一篇博客,所以生成的python3是支持zlib、sqlite3的
编译&安装
-
make -j2
这一步提示编译已完成,但同样会发现缺失很多模块,参考前一篇博客,实际需要哪些模块的,可自己交叉编译
-
make install
执行完以上两个命令之后在_install中会产生bin lib include share 4个文件夹
目标板文件拷贝
现将_install整个文件夹,拷贝到ARM目标板的文件系统中,随意位置
我这里是通过nfs挂载到目标板的,因为目标板的Flash容量有限
拷贝zlib、sqlite3库文件到目标板
-
cp -rfp python_deps/lib/libz.so* Python-3.6.6/_install/lib/
-
cp -rfp python_deps/lib/libsqlite3.so* Python-3.6.6/_install/lib/
验证目标板Python
-
export LD_LIBRARY_PATH=/nfsroot/python/Python-3.6.6/_install/lib:$LD_LIBRARY_PATH
-
cd python/Python-3.6.6/_install/bin/
-
./python3
写几行代码,测试一下
测试结果符合预期!