网上关于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的文件夹。
2进入主机目录: cd host
5最后添加: export path=$ path :/home/host/bin此处的路径根据自己的实际路径进行修改即可。
2重命名压缩包,区分是在build主体上使用还是在target主体上使用。 build本体使用的我都统一为后面加_build,target本体使用的统一为后面加_target
其中--prefix是指定编译后安装的路径
说明: 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部分进行修改
5将以前设置的交叉编译器更改为缺省编译器: export CC=此处=表示以后不赋值,设置为空。 这样的话,我就去找默认的gcc
8cd /home/python-build/bin
11将此python-build添加到环境变量中,并设置为build主机上的默认python : export path=/home/python-build/bin : $ path
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 /
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
将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
5安装未用pip命名的numpy第三方库: 这个报告错误。
六改名:
发表评论