源码
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 执行结果,就不贴图了
网友评论