美文网首页Android开发
Mac 编译 XGBoost for Android

Mac 编译 XGBoost for Android

作者: 晔大魔王 | 来源:发表于2020-03-20 11:43 被阅读0次

源码

xgboost 的官方源码: https://github.com/dmlc/xgboost

编译环境

因为 mac 已经使用 clang 代替 gcc,不支持 OpenMp,需要先安装相关库: brew install libomp

安装 NDK 最新版本,本次使用 NDK-r16b

确保 clang 版本支持-fopenmp 参数

Mac OS 版本 10.15+

以下是本机环境,通过 brew config 查看

HOMEBREW_VERSION:2.2.10
Clang:11.0 build 1100
Git:2.15.0 => /usr/local/bin/git
Curl:7.64.1 => /usr/bin/curl
Java:1.8.0_221, 1.8.0_121
macOS:10.15.2-x86_64
CLT:11.3.1.0.1.1576735732

编译过程

创建 build_32.sh 脚本:

#!/bin/bash
export ANDROID_NDK=/Users//Library/Android/sdk/android-ndk-r16b
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI="armeabi-v7a"\
-DANDROID_STL=c++_static \
-DANDROID_TOOLCHAIN=clang \
-DNATIVE_LIBRARY_OUTPUT=.

make -j4

在源码根目录下创建 build_android 目录,并在目录下执行脚本:

mkdir build_android
cd build_android
./build_32.sh

编译产物

源码根目录 /lib 下,会产生 libxgboost.so

将近 60MB... 囧rz

Demo 及测试

源码目录下,demo/c-api 即为 C 语音版本接口 Demo,修改 CMakeList.txt ,以便进行交叉编译

cmake_minimum_required(VERSION 3.12)
add_library( xgboost SHARED IMPORTED )
set_target_properties(xgboost  PROPERTIES IMPORTED_LOCATION  ../libxgboost.so)
include_directories(../../include)
add_executable(api-demo c-api-demo.c)
target_link_libraries(api-demo xgboost)

在源码根目录下创建 build_android 目录,并在目录下执行脚本,脚本内容与前文一致:

mkdir build_android
cd build_android
./build_32.sh

push 以下文件到 Android 手机的 /data/local/tmp 目录下:

编译产物:api-demo

模型训练和测试数据:agaricus.txt.test, agaricus.txt.train

xgboost 动态库:libxgboost.o

adb push api-demo /data/local/tmp/demo/apiDemo/
adb push agaricus.txt.test /data/local/tmp/demo/data/
adb push agaricus.txt.train /data/local/tmp/demo/data/
adb push libxgboost.so /data/local/tmp/demo/apiDemo/
adb shell   # 进入手机 shell
cd /data/local/tmp/demo/apiDemo
LIBRARY_PATH=/data/local/tmp/demo/apiDemo ./api-demo

可以看到 demo 执行结果,就不贴图了

相关文章

网友评论

    本文标题:Mac 编译 XGBoost for Android

    本文链接:https://www.haomeiwen.com/subject/hktjyhtx.html