TensorFlow C++ 编译札记

最近因为工作需要,要将很久都没有碰过的 TF 框架重新用起来,而且还需要使用 C++ 端口做一些工程开发工作。鉴于这些工作实在是太多坑,不同版本的软件相互间又不兼容。如果考虑到要在有墙的情况下 debug 简直雪上加霜。因此决定记录自己在安装和使用过程中碰到的问题。

这篇文章会持续更新,大家可以根据更新时间来确认这篇文章的内容是否还使用,我想一般3-6个月内问题不大。网络上很多 17/18 的文章可以看,但就不要尽信了。

硬件环境

MacOS 10.15
Tensorflow 1.14

TF-CPP 库编译

Bazelisk

TF-CPP 库的编译需要使用 bazel 进行,但由于不同TF版本对bazel的需求不一样,因此我强烈建议通过 bazelisk 来安装 bazel。安装方法很简单:

brew install bazelisk

不能使用 brew 或者其他平台的用户可以直接到网站上下载
安装完成后,根据直接的使用需要确定 bazel version,然后通过设置环境变量的方式告诉 bazelisk 你要使用的版本,

export USE_BAZEL_VERSION=x.x.x

执行上述命令后,只要你再执行一次 bazelisk 的任何命令(包括 -h),bazelisk 就会帮你完成下载和安装,十分方便

编译方法

bazel 准备好后,编译方式就比较简单了,先在github上下载tensorflow源码,执行./configure先配置项目,然后按照这篇博客里写的利用bazel编译动态链接库,编译命令如下

C版本:

bazel build :libtensorflow.so

C++版本:

bazel build :libtensorflow_cc.so

编译成功后,在bazel-bin/tensorflow/目录下会出现libtensorflow.so/libtensorflow_cc.so文件

其他注意事项

  1. 编译过程中若出现错误 bazel error: “http_archive” is not defined时,需要将 bazel 版本降低到 0.19.0,因为此错误出现在 bazel > 0.20.0。
  2. 安装前强烈建议根据需要从此页面中确认需要使用的依赖版本
  3. bazel 0.15.0 存在 JVMs matching version “1.7+” not found 的问题,但是并不影响 TF 的编译
  4. 假若在编译过程中出现 bazel build error: //external:icu erro downloading ...,详细解决方法请见此页面,通过更改 tensorflow/third_party/icu/workspace.bzl 中的 sha 为86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181 即可解决

参考

https://www.cnblogs.com/hrlnw/p/7383951.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值