[python语言的第三方库]python第三方库的交叉编译使用记录

网上关于python交叉编译的报道很多,但是关于python第三方库的交叉编译的报道很少。 另外,很多标题是第三方库的交叉编译,但实际使用的是不需要交叉编译就可以使用的库,可参考性不强。 最近,对于python及其第三方库的交叉编译也踩了很多漏洞。 试着记录一下吧。

1什么是交叉编译:在一个平台上生成另一个平台上的可执行代码。

2为什么交叉编译:在进行嵌入式系统开发时,运行程序的目标平台通常具有有限的存储空间和运算能力。 例如,一般的ARM平台一般的静态存储区小,并较弱CPU计算能力。 在这种情况下,不可能在ARM平台上进行本机编译,为了解决这个问题,交叉编译工具应运而生。 使用交叉编译工具,可以在具有高CPU能力和足够存储控制的主机平台上编译其他平台的可执行文件。

2目标板: armv7l

4python版本:3.5.2

5numpy==1.18.5

2指定gcc-8为默认gcc: sudo ln

1在build主机上交叉编译zlib库。 这是安装python源所需的依赖库

3在build主机上安装python版本,我们就变成python-build了

4在构建主机上交叉编译目标主机上的python版本。 将其称为python-target

1解压缩交叉编译链:说明不同平台使用的交叉编译链不同,思路和步骤相同。

解压缩后,得到名为host的文件夹。

751754-20220927193543664-34795963.png

2进入主机目录: cd host

5最后添加: export path=$ path :/home/host/bin此处的路径根据自己的实际路径进行修改即可。

751754-20220927194201563-1269890669.png

751754-20220927194407927-1012691809.png

2重命名压缩包,区分是在build主体上使用还是在target主体上使用。 build本体使用的我都统一为后面加_build,target本体使用的统一为后面加_target

其中--prefix是指定编译后安装的路径

751754-20220927200619264-1518139497.png

751754-20220927195806129-1101883672.png

说明: no-ASM:no-ASM表示不使用汇编代码就能加快编译速度。 否则会报告错误

--prefix:已经是交叉编译后的路径

2改名: mv zlib-1.2.11 zlib-1.2.11-build

3cd zlib-1.2.11-build

2改名: mv zli B-1.2. 11 zli B-1.2. 11-target

我们也准备好包zlib-build和zlib-target了

1解压缩源代码包: tar -xzvf%26nbsp;%26nbsp;libffi-3.2.1.tar.gz

2更名: mvlibffi-3.2.1 lib FFI-3.2.1-target

b对zlib部分进行修改

751754-20220927204929114-2012292755.png

5将以前设置的交叉编译器更改为缺省编译器: export CC=此处=表示以后不赋值,设置为空。 这样的话,我就去找默认的gcc

8cd /home/python-build/bin

11将此python-build添加到环境变量中,并设置为build主机上的默认python : export path=/home/python-build/bin : $ path

751754-20220927210630311-1274876806.png

1解压缩源代码包: tar xvf Python-3.5.2.tgz

2改名: mv python-3.5.2 python-3.5.2-target

3cd python-3.5.2-target

4创建文件夹: mkdir /home/python-target

CP-RFP/home/zli B-1.2. 11-target/zli B- target/*/home/python-target /

CP-RFP/home/lib FFI-3.2.1-target/lib FFI-target/*/home/python-target /

751754-20220927211800544-525471193.png

751754-20220927211824097-831384360.png

9设置编译环境:这里为了便于查看,我手动按参数换行了。 请注意,在实际使用中不应该换行

当前位置是在build主机上编译了python-build和python-target

1在build主机上使用python-build构建python-target虚拟环境,然后将python-target第三方库打包到虚拟环境中。 这里以numpy为例。 因为numpy必须交叉编译才能使用。

2cd /home/python-build/bin

5cd cross_venv/cross/bin

10创建用于存储编译后第三方的文件夹: mkdir /home/target_lib

13验证: cd /home/target_lib

751754-20220928094115643-1200350856.png

将numpy-1.18.5-cp35-cp35m-Linux _ arm.whl改为numpy-1.18.5-cp35-cp35m-Linux _ arm v7l.whl。 否则我会报告错误。 这个坑在我的一个月里一直在坑里,我尝试了很多方法,是编译链的问题还是编译过程的问题。 将交叉编译的numpy.whl文件移植到目标板上时,总是会报告错误,突然灵光一闪,可以手动重命名。 这个洞竟然是一个巨大的洞,破了一个月。

将编译的python-target软件包和numpy-1.18.5-cp35-cp35m-Linux _ arm.whl移植到目标板

1压缩目标:

3解冻目标:

6验证交叉编译的第三方

3配置pip源

amkdir ~/.pip

bvi ~/.pip/pip.conf

c添加以下代码

4验证pip

751754-20220928105656195-1985304503.png

5安装未用pip命名的numpy第三方库: 这个报告错误。

751754-20220928105833609-79780927.png

六改名:


发表评论

Copyright 2002-2022 by 致觉英语学习网(琼ICP备2022001899号-3).All Rights Reserved.