bazel支持的平台有Ubuntu Linux、Mac OS X、Windows等,本文基于Ubuntu14.04下的bazel,其它平台的安装参考官网安装教程。
Bazel安装
1.先安装Bazel的依赖
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get install openjdk-8-jdk openjdk-8-source
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
注意:如果你没有安装add-apt-repository命令,需要执行sudo apt-get install software-properties-common命令
2.下载安装文件,然后再改变可执行权限
https://github.com/bazelbuild/bazel/releases
如:https://github.com/bazelbuild/bazel/releases/download/0.5.3/bazel-0.5.3-installer-linux-x86_64.sh
下载好bazel安装文件后,执行如下步骤:
(1)复制到虚拟机中, 终端然后切换到.sh文件存放的路径,文件添加可执行权限:
$ chmod +x bazel-0.5.3-installer-linux-x86_64.sh
(2)然后执行该文件:
$ ./bazel-0.5.3-installer-linux-x86_64.sh --user
注意:--user选项表示bazel安装到HOME/bin目录下,并设置.bazelrc的路径为HOME/.bazelrc。
(3)设置Bazel 环境变量
$ sudo gedit ~/.bashrc
在 ~/.bashrc文件的末尾添加
export PATH=/home/ckt/bin:$PATH
source ~/.bashrc
遇到的问题及解决方法
解决方法:重新下载安装文件,大小大约201M,https://github.com/bazelbuild/bazel/releases/download/0.5.3/bazel-0.5.3-installer-linux-x86_64.sh
2.编译tensorflow jar出问题
(1)编译目录出错
解决方法:在tensorflow源码根目录执行
解决方法:翻墙
解决方法:修改WORKSPACE文件:在/tensorflow目录下的WORKSPACE文件,找到如下一段代码,对应配置好你的sdk版本以及位置,还有ndk的版本和位置,并且去掉注释:
# Uncomment and update the paths in these entries to build the Android demo. android_sdk_repository( name = "androidsdk", api_level = 23, //设置成你安装sdk的最高版本,对应修改manifest.xml以及gradle的target # Ensure that you have the build_tools_version below installed in the # SDK manager as it updates periodically. build_tools_version = "25.0.2", # Replace with path to Android SDK on your system path = "/home/ckt/Android/Sdk", )
注意:
api_level需要设置成你本地sdk最高的版本,推荐23及以上,在android:build.gradle 以及AndroidManifest.xml也对应修改targetSdkVersion
3.编译tensorflow so库出问题,WORKSPACE中的Android NDK版本不对
其错误之一如下图:
解决方法:配置成android-ndk-r12b版本
# Android NDK r12b is recommended (higher may cause issues with Bazel) android_ndk_repository( name="androidndk", path="/home/ckt/projects/tools/android-ndk-r12b", # This needs to be 14 or higher to compile TensorFlow. # Please specify API level to >= 21 to build for 64-bit # archtectures or the Android NDK will automatically select biggest # API level that it supports without notice. # Note that the NDK version is not the API level. api_level=14)
注意:ndk的版本,推荐使用r12,否则bazel编译的时候会报错。
另外:编译完毕后,android_tensorflow_inference_java.jar和libtensorflow_inference.so的路径为:
/tensorflow/bazel-bin/tensorflow/contrib/android