从源代码编译bazel

从源代码编译bazel

要在32位的arm Linux上编译tensorflow,安装bazel编译工具是必不可少的。bazel对64位操作系统的支持较为完善,但对于32位系统就不那么友好了。

安装编译工具

sudo apt-get install build-essential openjdk-11-jdk python zip unzip

这一步大多不会有什么问题,需要注意的是JDK的版本可能无法装上当前的系统,需要换成openjdk-8-jdk。当然也可以通过下载JDK的安装文件进行配置:参考教程

下载bazel源码

安装完成上述工具后,到官方的Github上获取bazel的源码。可供编译的bazel源码在文件名为bazel-XXX-dist.zip的压缩包里,有多种版本的bazel可供选择。
在这里插入图片描述

这里需要注意的一点是编译不同版本bazel对JDK工具是有版本限制的,比如bazel-3.4.1的版本不支持用JDK 8来编译。
我使用的是JDK 8版本,因此先下载了bazel-0.16.0的源码来编译。

解压和编译

将下好的bazel-XXX-dist.zip文件放入到系统文件目录中,并解压到一个新文件夹内。

sudo unzip bazel-XXX-dist.zip

进入文件夹,使用命令开始编译。

env BAZEL_JAVAC_OPTS="-J-Xms384m -J-Xmx1g" bash ./compile.sh

出现以下内容时说明开始编译了,时间较长(2小时左右)需要耐心等待。

🍃  Building Bazel from scratch......
🍃  Building Bazel with Bazel.

可能出现的编译错误

  1. 也许会出现以下错误:
java.lang.OutOfMemoryError: Java heap space

说明Java的heap space太小了,适当调大点,如:

env BAZEL_JAVAC_OPTS="-J-Xms384m -J-Xmx2g" bash ./compile.sh
  1. 还可能出现以下错误:
Configurable attribute "actual" doesn't match this configuration: Could not find a JDK for host execution environment, please explicitly provide one using `--host_javabase.`

说明目前使用的JDK版本太低不支持编译该版本的bazel,因此需要更新的JDK或者先选择版本较低的bazel编译,之后再通过bazel进行升级。

安装bazel

编译成功后会输出信息,如:

Build successful! Binary is here: /home/xilinx/jupyter_notebooks/building_environment/bazel_old/output/bazel

到输出目录下,执行:

./bazel

如果成功安装,会输出一些说明
在这里插入图片描述
此时可以把bazel拷贝出来,并且在环境变量中添加命令。

sudo cp ./bazel /home/xilinx/ 

打开profile文件

sudo nano /etc/profile

在profile最后一行添加环境变量:

export PATH=/home/xilinx/:$PATH

针对内存不足的一些补充

过了几天又需要编译bazel了,但是换了个bazel版本怎么调大heap space都不行。机器内存还是太小了,只能尝试调大swap空间。
查看当前的swap大小

swapon -s

只有1GB的内存和1GB的swap
在这里插入图片描述
增加swap大小

sudo dd if=/dev/zero of=/home/swap bs=1024 count=1048576
sudo mkswap /home/swap
sudo swapon /home/swap

重新查看

swapon -s

swap增大到了2G
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值