【MAC】Ncnn 编译so文件方案

1、下载ncnn github地址是:https://github.com/Tencent/ncnn

指定目录:在终端或者git管理工具 输入:
    git clone https://github.com/Tencent/ncnn.git

2、编译Ncnn

2.1 Mac平台 安装cmake、wget(根据实际编译需要)

    注:cmake终端安装方式:brew search cmake
                    brew install cmake
        wget安装方式如上过程。

2.2 进入 ncnn(cd ncnn)然后执行sudo ./build.sh

    注:在mac下会出异常(其他平台win或Linux未亲测)也许有些环境可以直接运行,目前使用的是oh-my-zsh 终端环境
    接着修改build.sh执行文件
    把文件头 #!/usr/bin/bash,修改为 #!/usr/bin/env bash

    然后再执行sudo ./build.sh
    如果出现 提示 export ANDROID_NDK=~/your/ndk/path
    配置自己的ndk路径。安装android studio的朋友可以直接打开AS然后在里面找到ndk路径

如果没有其他异常提示则运行成功 如下图:

有build-android-armv7文件夹,里面包含了install/lib和include(稍后需要用到)

2.3 编译so的的命令ndk-build

jni路径见下图

进入jni路径下
然后在终端输入:sudo ndk-build
正常情况下会有如下提示:

    Android NDK: android-9 is unsupported. Using minimum supported version android-14.    
    Android NDK: WARNING: APP_PLATFORM android-14 is higher than android:minSdkVersion 1 in /Users/lichong/Documents/android/github/ncnn/examples/squeezencnn/AndroidManifest.xml. NDK binaries will *not* be comptible with devices older than android-14. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.    
    Android NDK: ERROR:/Users/lichong/Documents/android/github/ncnn/examples/squeezencnn/jni/Android.mk:ncnn: LOCAL_SRC_FILES points to a missing file    
    Android NDK: Check that /home/nihui/dev/qqfacecnn/ncnn/build-android-armv7/install/lib/libncnn.a exists  or that its path is correct   
    /Users/lichong/Library/Android/sdk/ndk-bundle/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting    .  Stop.

重要的是“LOCAL_SRC_FILES points to a missing file”
根据提示路径可以找到Android.mk文件:其中有“LOCAL_SRC_FILES := $(NCNN_INSTALL_PATH)/lib/libncnn.a”
再追述“NCNN_INSTALL_PATH=/home/nihui/dev/qqfacecnn/ncnn/build-android-armv7/install”
这个路径看上去很眼熟。哈哈哈!因为这个就是工程的绝对路径。修改ncnn前面的路径“/home/nihui/dev/qqfacecnn/”为~</your/path>即可

再次运行ndk-build
会有如下提示:
    Android NDK: android-9 is unsupported. Using minimum supported version android-14.    
Android NDK: WARNING: APP_PLATFORM android-14 is higher than android:minSdkVersion 1 in /Users/lichong/Documents/android/github/ncnn/examples/squeezencnn/AndroidManifest.xml. NDK binaries will *not* be comptible with devices older than android-14. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.    
[armeabi-v7a] Compile++ thumb: squeezencnn <= squeezencnn_jni.cpp
[armeabi-v7a] SharedLibrary  : libsqueezencnn.so
[armeabi-v7a] Install        : libsqueezencnn.so => libs/armeabi-v7a/libsqueezencnn.so

如出现以上提示。
恭喜你成功编译出so文件!!!

3、后记

快过了一年了。最近有反馈在ndk: r19c无法编译出so
现象如下:

也许有童鞋看上去眼熟。这是因为NDK高版本对源码规范比较高导致的。

建议参考:
【亲测】【Android Studio】升级3.1.2异常记录

可下载里面ndk-v16进行编译试试!

以上问题由下面的童鞋反馈

感谢@超级土豆EX

联系我

QQ群号: 94297366
Email: lichongmac@163.com