基于arm-linux-gnueabihf 移植python3.6和第三方库

摘要

项目需要,要在嵌入式板子上移植python,预期需要的第三方库为numpy、pandas和pymodbus及其依赖库。记录踩坑过程。
主机为32位ubuntu
目标板为32位arm板子,
交叉编译工具链为arm-linux-gnueabihf-
readelf -h 文件名 查看文件的使用架构

  1. 嵌入式的第三方库无法使用pip install 安装
  2. 如果需要使用pip instal的话还需要_ctype和zlib
  3. numpy需要_ctypes
  4. pymodbus需要_ssl和zlib
  5. pandas需要_bz2
  6. 需要使用主机版pyhon的解释器,才能对目标板python的setup进行解释

准备

python3.7源码:、numpy源码:、pandas源码:、pymodbus源码:、six源码:、serial源码:、opsenssl源码:、bzip2源码:
在这里插入图片描述

大致流程

编译主机依赖库,编译主机python,编译目标板python,打包至目标板,编译目标板第三方库
注:所有操作在root账户下进行
sudo -i 进入root

编译依赖库

openssl for _ssl

主机openssl编译

openssl参考
参考上文,设置编译位置为/opt/hostssl

cd 源码路径
export 	CC=
./configure --prefix=/opt/hostssl
make
make install
mv /usr/bin/openssl /usr/bin/openssl.old    		//将旧版本的openssl进行备份
ln -s /usr/local/bin/openssl /usr/bin/openssl    	//将新版本的openssl进行软链接
openssl version
OpenSSL 1.1.1q  5 Jul 2022

如果提示找不到动态库,做如下操作

export LD_LIBRARY_PATH=/opt/hostssl/lib:$LD_LIBRARY_PATH  #添加库路径
echo $LD_LIBRARY_PATH  #查看库路径
目标板openssl编译

openssl参考
参考上文,编译位置选择:–prefix=/opt/ssl

cd 源码路径
make clean
mkdir /opt/ssl
./config no-asm -shared --prefix=/opt/ssl \
	CC=arm-linux-gnueabihf-gcc \
	CXX=arm-linux-gnueabihf-g++ \
	AR=arm-linux-gnueabihf-ar \
	RANLIB=arm-linux-gnueabihf-ranlib

修改makefile文件
搜索 m32 选项并删除,共两处(如是64位系统则是m64)
如不删除则编译时会出现以下错误

error: unrecognized command line option '-m32'

修改完成后

make
make install

libbz2 for _bz2

libbz2的编译

py3.7 for arm 仓库
该仓库中的libbz2.so.1.0.6和libbz2.1.0和_bz2.cpython-37m-arm-linux-gnueabihf.so可以直接使用之后再说这一步

zlib

主机板zlib编译
unzip zlib-master.zip
cd zlib-master
export CC=gcc
./con
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值