设置android SDK和NDK路径

例如:

export SDK_PATH=/root/codes/my_sdk/sdk/
export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/
sdk和ndk下载方法参考:

tflite本地构建和调用_Luchang-Li的博客-CSDN博客_tensflow tflite model如何调用

设置好环境变量,把下面的build.sh放在代码目录直接执行即可,在build目录内部相应位置会生成so文件。

编译openblas

git clone --recursive -b v0.3.21 https://github.com/xianyi/OpenBLAS.git

可以在-b设置需要的版本。

build.sh

#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"mkdir ${SCRIPT_DIR}/build
cd ${SCRIPT_DIR}/build# please set SDK_PATH, NDK_PATH, etc. by env
# require download cmake, etc. by sdkmanager "cmake;3.18.1" "ndk;24.0.8215888" --channel=0 --sdk_root=./sdk_path
# require ndk >= 24.0.8215888
# for example:
# export SDK_PATH=/root/codes/my_sdk/sdk/
# export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/if [ ! -d ${SDK_PATH} ] ; thenecho "ERROR: please set valid sdk path by env SDK_PATH"exit 1
fi
if [ ! -d ${SDK_PATH}/cmake/3.18.1/ ] ; thenecho "ERROR: please download cmake 3.18.1 for sdk"exit 1
fi
if [ ! -d ${NDK_PATH} ] ; thenecho "ERROR: please set valid ndk path by env NDK_PATH"exit 1
fi
if [ -z ${ANDROID_ABI} ] ; thenANDROID_ABI=arm64-v8a
fi
if [ -z ${MINSDKVERSION} ] ; thenMINSDKVERSION=29
fiecho "SDK_PATH:" $SDK_PATH
echo "NDK_PATH:" $NDK_PATH
echo "ANDROID_ABI:" $ANDROID_ABI
echo "MINSDKVERSION:" $MINSDKVERSION# -DBUILD_SHARED_LIBS=ON \${SDK_PATH}/cmake/3.18.1/bin/cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \-DANDROID_ABI=${ANDROID_ABI} \-DANDROID_NDK=${NDK_PATH} \-DANDROID_PLATFORM=android-${MINSDKVERSION} \-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI} \-DCMAKE_ANDROID_NDK=${NDK_PATH} \-DCMAKE_MAKE_PROGRAM=${SDK_PATH}/cmake/3.18.1/bin/ninja \-DCMAKE_SYSTEM_NAME=Android \-DCMAKE_SYSTEM_VERSION=${MINSDKVERSION} \-DANDROID_STL=c++_static \-DCMAKE_CXX_FLAGS_RELEASE="-s"  \-DBUILD_STATIC_LIBS=ON \-GNinja \..
if [ $? -ne 0 ]; thenecho "ERROR: cmake failed"exit 1
fi${SDK_PATH}/cmake/3.18.1/bin/ninja
if [ $? -ne 0 ]; thenecho "ERROR: build failed"exit 1
fi

编译faiss

​git clone --recursive -b v1.7.2 https://github.com/facebookresearch/faiss.git
#!/bin/bash
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"mkdir ${SCRIPT_DIR}/build
cd ${SCRIPT_DIR}/build# please set SDK_PATH, NDK_PATH, etc. by env
# require download cmake, etc. by sdkmanager "cmake;3.18.1" "ndk;24.0.8215888" --channel=0 --sdk_root=./sdk_path
# require ndk >= 24.0.8215888
# for example:
# export SDK_PATH=/root/codes/my_sdk/sdk/
# export NDK_PATH=/root/codes/my_sdk/sdk/ndk/24.0.8215888/if [ ! -d ${SDK_PATH} ] ; thenecho "ERROR: please set valid sdk path by env SDK_PATH"exit 1
fi
if [ ! -d ${SDK_PATH}/cmake/3.18.1/ ] ; thenecho "ERROR: please download cmake 3.18.1 for sdk"exit 1
fi
if [ ! -d ${NDK_PATH} ] ; thenecho "ERROR: please set valid ndk path by env NDK_PATH"exit 1
fi
if [ -z ${ANDROID_ABI} ] ; thenANDROID_ABI=arm64-v8a
fi
if [ -z ${MINSDKVERSION} ] ; thenMINSDKVERSION=29
fiecho "SDK_PATH:" $SDK_PATH
echo "NDK_PATH:" $NDK_PATH
echo "ANDROID_ABI:" $ANDROID_ABI
echo "MINSDKVERSION:" $MINSDKVERSION${SDK_PATH}/cmake/3.18.1/bin/cmake \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \-DANDROID_ABI=${ANDROID_ABI} \-DANDROID_NDK=${NDK_PATH} \-DANDROID_PLATFORM=android-${MINSDKVERSION} \-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI} \-DCMAKE_ANDROID_NDK=${NDK_PATH} \-DCMAKE_MAKE_PROGRAM=${SDK_PATH}/cmake/3.18.1/bin/ninja \-DCMAKE_SYSTEM_NAME=Android \-DCMAKE_SYSTEM_VERSION=${MINSDKVERSION} \-DANDROID_STL=c++_static \-DCMAKE_BUILD_TYPE=Release \-DFAISS_ENABLE_GPU=OFF \-DFAISS_ENABLE_PYTHON=OFF \-DBUILD_TESTING=OFF \-DBUILD_SHARED_LIBS=ON \-DBLA_VENDOR=OpenBLAS \-DMKL_LIBRARIES=/root/codes/faiss/OpenBLAS/build/lib/libopenblas.so \-DCMAKE_CXX_FLAGS_RELEASE="-s"  \-GNinja \..
if [ $? -ne 0 ]; thenecho "ERROR: cmake failed"exit 1
fi${SDK_PATH}/cmake/3.18.1/bin/ninja
if [ $? -ne 0 ]; thenecho "ERROR: build failed"exit 1
fi

注意这里面DMKL_LIBRARIES设置了openblas的so路径,以及其他cmake选项。

上面采用了静态链接的方式,使得最终编译的libfaiss.so不依赖额外的libopenblas.so而且so体积比较小。动态链接的方式libopenblas.so需要额外30M的空间。

android NDK编译openblas和向量检索库faiss相关推荐

  1. Android NDK编译中在libs\armeabi中加入第三方so库文件的方法

    Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...

  2. Android NDK 编译 三方库记录 及 jni库封装问题

    因工作需求, 要将原先的c++库跨平台编译,在Android上运行, 其依赖了几个第三方库, 也需要一起编译, 在此做个记录 所需工具(centos 系统上完成) 1. cmake 3.15.6 2. ...

  3. 在Android中使用Opus 1.3.1(Ndk编译使用Opus so库)

    Android中使用Opus 1.3.1 Opus是一个开放格式的有损声音编码的格式,并在其使用上没有任何专利或限制.还可以处理各种音频应用,包括IP语音.视频会议.游戏内聊天.流音乐.甚至远程现场音 ...

  4. NDK 编译和使用静态库、动态库

    NDK 编译和使用静态库.动态库 情况一:编译静态库 情况二:编译动态库 情况三:编译动态库+静态库 情况四:已有第三方静态库(动态库),编译静态库(动态库) 默认所有代码和文件在$project/j ...

  5. android libev 编译,移植libev事件库到Android中

    因为libev库是使用C语言写的,所以在Android项目中使用此库的方法是把libev编译成.so文件,在Android中使用jni方式来调用libev的.so文件. 我们大家都知道android的 ...

  6. android jni不适用ndk,Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  7. android ndk 编译c++11,Android NDK中的c++ STL

    田海立@CSDN 2020-11-25 Android NDK(Native Development Kit)提供了一套基于c/c++开发Android应用的工具.基于c/c++开发需要STL (St ...

  8. android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一

    版权信息:本文为本人原创,欢迎转载,但请著明出处,并保留本版权信息. Android NDK编译脚本编写起来还是是比较简单条理的,然而它的语法和传统的linux GNU Make编译脚本的编写似乎有很 ...

  9. NDK编译php,Android NDK编译常见错误及解决方案

    Android NDK编译常见错误及解决方案 Error 1:$ ndk-build/cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hello ...

最新文章

  1. 简单而又常用的基本的交换路由的一些配置命令
  2. 性能测试之计数器的阀值(windows)
  3. Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
  4. 教你如何让电脑的ADSL宽带连接开机自动拨号
  5. python telnetlib执行命令_使用python Telnet远程登录执行程序的方法
  6. 用pandas填充时间序列缺失值
  7. 第三次学JAVA再学不好就吃翔(part41)--修饰符
  8. oracle视图view看不出来主键,oracle - 使用主键创建视图
  9. wopi php,Office Online Server WOPI 接口
  10. 20200708:动态规划复习day02
  11. TQ2440实现触摸屏和qt图形 解决segmentation fault
  12. 测试用例设计方法详解
  13. 大咖讲|中国AGV技术发展历程及关键点
  14. 信息与计算机科学学校排名,2021中国信息与计算科学专业大学排名 最好的高校排行榜...
  15. 蓝桥杯练习题——数列求和
  16. 小游戏“程序猿大战产品*那啥”
  17. java mocked_java如何使用Mockito?
  18. 【Linux学习笔记】40:配置自己的桌面版CentOS6.9
  19. 全球及中国农业微量营养素行业商业模式分析及投资风险预测报告2022-2028年版
  20. 抖音如何推广运营?抖音如何快速涨粉?

热门文章

  1. 2021年A特种设备相关管理(锅炉压力容器压力管道)考试题及A特种设备相关管理(锅炉压力容器压力管道)考试技巧
  2. 什么是C语言数组地址
  3. Python使用opencc工具进行繁简转换
  4. 【Fortran】I/O(WRITE 和 READ)格式化输出、输入(初级)
  5. Z-Wave 700应用程序框架第四章 - 从零开始一个Z-Wave Plus应用
  6. 技嘉B75-D3V nvme BIOS
  7. 制作chm文件搜索时总提示找不到主题的问题
  8. KafkaManager安装教程
  9. 2007高校BBS上20个睿智的冷笑话 (转载:csdn论坛;楼主:cuta)
  10. linux如何编译tex,linux下编译bib、tex生成pdf文件