1、由于以前没有接触过关于这方面问题,在工作初,在网上搜资料,但是网上资料五花八门的,于是我自己花了三天一步步的移植成功,在此,我把它的移植过程整理如下:
2、编译问题。
(1)编译使用编译 主机自带的交叉编译工具链(64位)编译中出错,通过查资料发现原因是没有在主机上安装相应的pthon3.6.6.
解决方法: 在官网上下载对应的版本的tar包,然后按照如下步骤编译安装。
-
./configure
-
make
-
make install
(2). 配configure的参数, cnfigre (CCx… 时,出错,原因是没有提前让生成解释器。在这里需要注意指定路径(prefix)) ,否则最后就会默认安装到/usr/bin下,导致移档缺少基本库。
解决方法: Make Parse/pgen生成解释器
(3) Make时, 出错, 原因是没有清理以前编译时一 些没有用的文件.
解决方法: make clean
(4)Make install时 ,可能会出现subprocess.CalledProcessErrorC ommand '( ‘lsb release,‘a’ )’ returned non-zero exit statas 1.的错误。
解决方法:执行命令rm -rf /usr/bin/lsb release可以解决这个问题。此时需要在make dlean下,然后在执行make & make install.
(5)把交叉编译成功的的mybuild文件移植arm板中。可以放到/opt下面,不过要建立软连接,否则只能在mybuild/bin执行python3才会显示成功。其中还有一些问题, 由于编译主机自带交又编译的工具链的版本比较高,交叉编译成功的python移植到arm板上和arm上自带的一个基本库glibc2.19不匹配。导致直提醒缺少glibc2.25库。 经过不断的尝试和咨询:最后得出解决方法有两种,一 种是吧动态库变成静态库,但是可行性不高,系统容易死掉,几乎所有东西的运行都依赖的glibc库。第二种,更换工具链,换成和arm板相匹配的工具链,可行性高,但是在此过程中还得注意一个问题, 那就是编译主机的环境要和arm板相匹配的工具链(32位)一致, 否则也会报错。通过不断尝试和更换不同的工具链得出的结论。
3、总结
整体分为三大步骤:
1、 直接编python,生python的解程器.如果虚权机没有安装ptho3.6.6,那么安装pthon3.6.6
2、交叉编译python
3、 复制可移植文件到arm
具体步骤:
1)选择arm匹配的工具链,和下载python对应的包。
2)解压python3.6.6.tar.gz.
-
编译出解释器: ./configure make (make Parser/pgen) make install
-
mkdir mybuild
5)配置configure 的参数:主要参数: CC=arm-none linux -gnueabi-gcc CXX= arm none linux gnueabi-gc+ + AR=arm none linux -gnueabi-ar RANLIB=arm-none linux -gnueabi-ranlib - host= arm-none -linux- gnueabi一build=x86_ 64 --disable ipv6
ac_ CV_ file_ dev_ ptmx=no ac CV file_ dev_ ptm=no -
–prefix= $(pwd)/mybuild
-
make
-
make install
8)找到mybuild文件,文件夹里主要有四个文件: bin share lib incude 把他们压缩成tar包,然后把他们复制到arm系统下/opt 下指定软连接。验证是否成功,
注释: CC为指定的C交叉编译器
CXX为指定C+ +交叉编译器。
AR为ar工具。
RANLIB为ranlib工具。
host为目标主机,交叉编译工具链的前缀。
build为编译环境主机。
prefix为安装路径。