MaixPy3在ubuntu上编译
# Sipeed V831 toolchain-sunxi-musl
这是由 V831 的 SDK 导出的二进制编译链,用于交叉编译内部的 Python 模块或 C 工程。
## shell bash usage
在 linux 系统下,解压后在当前目录,执行下述命令加载环境,这会替换当前终端的 python3.8 和 pip3.8 以及 gcc ,最后通过 Python3.8 编译得到 linux_armv7l.whl 的二进制包。
```shell
source v831/envsetup.sh
git clone https://github.com/sipeed/python3-maix
cd python3-maix
python3.8 setup.py build bdist_wheel
ls dist
```
如果缺乏静态库和动态库,缺少依赖造成的
sudo apt-get install build-essential module-assistant gcc-multilib g++-multilib
https://blog.csdn.net/zhangHK33/article/details/118785972
ImportError: libxxx: cannot open shared object file: No such file or directory
缺乏环境变量,执行以下命令
echo $LD_LIBRARY_PATH export LD_LIBRARY_PATH=”/usr/local/lib64/”
这会得到 `dist/python3_maix-*.*.*-cp38-cp38-linux_armv7l.whl` 将其传入 IP 地址为 192.168.0.156 的硬件里。
```shell
scp dist/python3_maix-0.1.1-cp38-cp38-linux_armv7l.whl root@192.168.0.156:/root/
```
切换到 V831 的 shell 终端,安装并运行该模块。
```shell
pip install /root/python3_maix-*.*.*-cp38-cp38-linux_armv7l.whl
python -c "import maix"
```
运行通过,删除编译的内容。
```shell
python3.8 setup.py clean --all
```
> 开发 Python 包时可以使用 python3.8 setup.py build & install 在进行跨平台的编译、安装、测试等操作,再推至下层硬件运行测试代码即可,可以用 tox 自动测试框架。
## note
该 Python3 环境与 V831 环境的 Python3 一致,通过它 Python 调用 toolchain-sunxi-musl 进行交叉编译得到相应平台的 linux armv7l 平台的 whl 二进制包,但此时你不能将该包安装在本机上,编译通过不代表可以实机运行,请自行配合 ldd 和 nm 查询相关依赖函数链接。
> 注 g++ 可以被 gcc -xc++ -lstdc++ -shared-libgcc 替换。
在 v831/usr 目录下可以自行添加系统必要的 lib ,如 libjpeg 或 libpng 等常见库,如果没有,就会从本机找。
## link
setup.py 的用法可以参考 [2021年,你应该知道的Python打包指南](https://frostming.com/2020/12-25/python-packaging)
## Hepl
在 v831 目录中的内容来源。
- toolchain-sunxi-musl 对应 sdk/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-arm9-musl 编译链。
- host 是与 V831 的 Python3 编译配置一致的 x86 版本,借助它调用 toolchain-sunxi-musl 可编译直接运行在 V831 armv7l 的 Py 模块,取自 sdk/out/v831-sipeed/staging_dir/target/host。
- usr 为 V831 linux 系统的 usr 目录,可以为 Python3 提供链接(/usr/include)系统环境的(.h)文件或链接(.so)库。