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/<yourname>/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/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 目录下:
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 执行结果,就不贴图了