Windows交叉编译MNN-3.0.0安卓版本库(通过WSL2)

一、写在前面

昨天写了在WIN10上面通过Andriod Studio来编译MNN的demo,通过解压.apk文件来得到libMNN.so文件。今天在记录一下使用WSL2来编译MNN-Andriod。

二、WSL2的安装

由于不是本篇的主题,故不在这里进行展开,后续会补充步骤链接。

三、WSL2编译环境配置

1、NDK-Linux安装

上篇在WIN10当中使用Andriod Studio的SDK Manager编译的SDK不适用于Linux,并且WSL2对WIN10的文件访问也存在一些权限问题,故在这里,我们重新在WSL2当中安装NDK。流程如下:

# 创建目录
mkdir -p ~/android-sdk/ndk
# 下载NDK(可以从Android官网下载Linux版本的NDK)
cd ~/android-sdk/ndk
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip
# 设置环境变量
echo 'export ANDROID_NDK=~/android-sdk/ndk/android-ndk-r25c' >> ~/.bashrc
source ~/.bashrc

下载的时候需要注意自己的网络环境,最好科学一下。
之后进行验证NKD工具链:

# 检查编译器是否存在
ls -l $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
ls -l $ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++

2、Cmake版本适配

MNN文档对于编译安装版本MNN是的cmake版本是有要求的:
image

我们这里重新安装一下Cmake来适配编译要求。

# 删除旧版本
sudo apt remove cmake
# 添加Kitware的APT仓库
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
# 安装新版本CMake
sudo apt update
sudo apt install cmake

四、在WSL2当中编译MNN(动态库)

执行如下指令:

cd /mnt/d/DeskTop/MNN/project/android
mkdir -p build_64 && cd build_64
../build_64.sh

一般来说就没啥问题了,不过需要注意的是,sh脚本当中编译宏编译的文件是动态链接,OUT文件需要搭配so文件才能正常执行。
把out文件和so文件推送到安卓设备的/data/local/tmp路径下面,然后设置LD_LIBBARY_PATH来指定库的搜索路径

# 进入adb shell
adb shell
# 进入目标目录
cd /data/local/tmp
# 设置库搜索路径为当前目录
export LD_LIBRARY_PATH=/data/local/tmp:$LD_LIBRARY_PATH

不过上述的“export LD_LIBRARY_PATH=/data/local/tmp:$LD_LIBRARY_PATH”指令是一次性的,只在当前的shell才有效。
每次进入都需要执行一次。

五、在WSL2当中编译MNN(静态库)

如果想要静态链接的OUY文件(不依赖so文件),则需要修改CMake配置,添加:

-DMNN_BUILD_SHARED_LIBS=OFF

enjoy yourself~~~

本文作者:笑眯眯办大事

本文链接:https://www.cnblogs.com/Vsonic12138/p/18632691

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   笑眯眯办大事  阅读(96)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起