Google最近发布了Tensorflow Lite,并且提供了demo,虽然该demo可以使用bazel build –cxxopt=’–std=c++11’ //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo命令成功编译出来,但是文档中并没有提及如何纯粹的编译出动态库,参考之前的一篇文章《当 Android 开发者遇见 TensorFlow》,这篇文章就简单介绍一下如何编译动态库
clone 代码
1 | git clone https://github.com/tensorflow/tensorflow.git |
修改TensorFlow项目根下的WROKSPACE文件
将以下代码反注释
1 | # Uncomment and update the paths in these entries to build the Android demo. |
然后修改android_sdk_repository中的path为自己电脑中的android sdk目录,修改android_ndk_repository中的path为自己电脑的android ndk目录。
值得注意的是,ndk的版本,官方建议使用大于r14的版本,下载地址android-ndk-r14b-darwin-x86_64.zip
编译
确保必要的工具已经安装,如bazel
1 | bazel build --cxxopt='--std=c++11' //tensorflow/contrib/lite/java:tensorflowlite \ |
编译其他ABI请修改cpu参数,分别为
1 | --cpu=armeabi |
产物位于
1 | bazel-bincontribjava/libtensorflowlite_jni.so |
注意编译mips和mips64的时候,需要将构建脚本稍微修改一下,删除一部分代码,否则会报错
找到/tensorflow/contrib/lite/build_def.bzl文件,找到如下代码
1 | def tflite_linkopts_unstripped(): |
将上面代码中的下面这段删除
1 | "//tensorflow:android": [ |
以及这一段也删除
1 | "//tensorflow:android": [ |
临时删除后,编译完mips和mips64还原即可,不然会报如下错误
1 | ERROR: /Users/lizhangqu/Desktop/tensorflow/tensorflow/contrib/lite/java/BUILD:133:1: Illegal ambiguous match on configurable attribute "linkopts" in //tensorflow/contrib/lite/java:libtensorflowlite_jni.so: |
1 | ERROR: /Users/lizhangqu/Desktop/tensorflow/tensorflow/contrib/lite/java/BUILD:133:1: Illegal ambiguous match on configurable attribute "linkopts" in //tensorflow/contrib/lite/java:libtensorflowlite_jni.so: |
