bazel编译环境主要依赖java和protobuf,在X86下面我使用的是protobuf和bazel的.sh配合编译,由于bazel没有.sh文件只能依赖源码.zip进行编译,所以我这里使用的是基于java进行编译。
下载地址:Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/
这里需要注册ORACLE,我使用的版本是jdk1.8.0_112,所以下载的是Java SE 8(8u202 and earlier),选择jdk-8u112-linux-arm64-vfp-hflt.tar.gz下载即可,这个版本也与接下来安装有关,版本不匹配后面会报错;
解压缩到指定目录(以jdk-8u112-linux-arm64-vfp-hflt.tar.gz为例)
创建目录
sudo mkdir /home/firfly/jvm
解压到该目录
sudo tar -zxvf jdk-8u112-linux-arm64-vfp-hflt.tar.gz -C /home/firefly/jvm
修改环境变量
sudo gedit ~/.bashrc
在文件末尾添加下面内容
#set oracle jdk environment
export JAVA_HOME=/home/firefly/jvm/jdk1.8.0_112 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
是环境变量马上生效
source ~/.bashrc
系统注册此jdk
sudo update-alternatives --install /usr/bin/java java /home/firefly/jvm/jdk1.8.0_112/bin/java 300
查看java版本
java --version
配置完成后建议重启一下;
bazel版本要和TensorFlow版本对应;
bazel版本查看方法:
TensorFlow源码下文件.bazelversion;
或者打开TensorFlow源码下tensorflow-master/configure.py
搜索可以找到:
_TF_MIN_BAZEL_VERSION = '4.2.2'
_TF_MAX_BAZEL_VERSION = '4.99.0'
这里我使用的是bazel-4.2.2,tensorflow-2.8.0;
Arm需要下载bazel-4.2.2-dist.zip
mkdir bazel
unzip bazel-4.2.2-dist.zip -d /home/firefly/bazel
进入bazel文件夹中执行
bash ./compile.sh
若直接输入./compile.sh
,有可能报错:找不到jdk
cd ./output
./bazel
假定编译好的bazel在/home/firefly/bazel/output目录下,则在~/.bashrc文件的末尾添加:
export PATH=/home/firefly/bazel/output:$PATH
使新的环境变量生效
source ~/.bashrc
或者将/home/firefly/bazel/output/bazel复制到/bin下面
sudo cp /home/firefly/bazel/output/bazel /bin
sudo apt-get update
sudo apt-get install python3-numpy
sudo apt-get install git
sudo chown -R firefly /home/firefly/Downloads/tensorflow-2.8.0/tensorflow-2.8.0
./configure # 如果只需要配置cpu环境就一直回车
注:如果选用cpu,只需要一直点确定继续就好,都是选择no;
bazel build --config=monolithic //tensorflow:libtensorflow_cc.so
注:上面代码一定要完整“//”后面也要加上;
编译完成后,在bazel-bin/tensorflow中会生成两个我们需要的库文件:libtensorflow_cc.so 和 libtensorflow_framework.so
期间会因为网络了连接不上github,多尝试几次就好。
src/main/tools/process-wrapper-legacy.cc:"execvp(git, ...)":No such file or directory
原因是没有安装git,参考上面安装依赖;
给Tensorflow编译文件夹权限,参考android:tensorflow_demo issue.. · Issue #1737 · tensorflow/tensorflow · GitHub
sudo chown -R firefly /home/firefly/Downloads/tensorflow-2.8.0/tensorflow-2.8.0
gcc:internal compiler error:KIlled (program cclplus)
原因可能是系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断,可以尝试增加swap交换分区来解决,具体可以参考【问题解决】内存不足引起“gcc: internal compiler error: Killed (program cc1plus)”以及解决办法_little_stupid_child的博客-CSDN博客
但是我使用这种方法增加交换分区过程中仍报错,后面就重新编译,也没有继续报gcc的错了,可以继续编译。
参考博客:Linux之Ubuntu18.04安装Java JDK8的三种方式_软测小生的博客-CSDN博客_ubuntu安装jdk8
Ubuntu安装TensorFlow C++_蓬莱道人的博客-CSDN博客
ubuntu18.04 tensorflow以及tensorflow lite源码编译C++库_上善若水-CSDN博客_ubuntu 编译tensorflowlite
Ubuntu安装编译TensorFlow C++_MclarenSenna的博客-CSDN博客