Mac 编译 XGBoost for Android

2020-03-19 22:21:02 +08:00
 SawyerSong

源码

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 及测试

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

4765 次点击
所在节点    Android
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX