当前位置: 首页 > news >正文

编译使用tensorflow c版本动态链接库

注意:如果是linux或mac os操作系统,可以参考https://www.tensorflow.org/install/install_c,直接下载对应的so库和头文件,然后跳到步骤4。如果不能使用,再从源码编译。

 

1.下载tensorflow源码

  git clone --recursive https://github.com/tensorflow/tensorflow

  假设路径为:tensorflow_repo_path

2.安装bazel

  mac os可以直接brew install bazel,没法联网安装的可以下载sh文件安装,也很简单

3.编译源码,生成so库

  进入tensorflow_repo_path/tensorflow文件夹,执行:

  bazel build :libtensorflow.so

4.添加必要路径

  最简单方法是直接把include中文件复制到/usr/local/include,把lib中文件复制到/usr/local/lib,或者修改对应的环境变量LD_LIBRARY_PATH,并在编译的时候指定       include目录。

5.编译运行测试程序

  依然是https://www.tensorflow.org/install/install_c上的内容,直接把下面代码保存成helloTF.c文件

#include <stdio.h>
#include <tensorflow/c/c_api.h>

int main() {
  printf(“Hello from TensorFlow C library version %s\n”, TF_Version());
  return 0;
}

  如果使用gcc编译,除了-L和-I中添加对应的库、头文件路径,还要加上-ltensorflow,如果使用xcode这类ide,也要在ide中添加相应路径、链接库

  编译成功后,把libtensorflow.so复制到可执行文件同一目录下(如果已经在/usr/local/lib或者在LD_LIBRARY_PATH中就不需要复制了),运行可执行文件,得到下面   的结果,即说明运行成功:

  

6.其他

  tensorflow目前已经支持多种语言,并且可以编译对应的库文件,具体可以参考tensorflow_repo_path/tensorflow/BUILD文件,这里面有多个编译目标,c++的目前   也已经支持,不过相关参考资料太少,只有tensorflow_repo_path/tensorflow/cc/tutorials/example_trainer.cc一个例子。

7.参考资料

  https://medium.com/jim-fleming/loading-tensorflow-graphs-via-host-languages-be10fd81876f

  https://medium.com/jim-fleming/loading-a-tensorflow-graph-with-the-c-api-4caaff88463f#.z4qeoyfb0

  https://www.tensorflow.org/install/install_c

相关文章:

  • Curator的使用
  • 开创学习的四核时代-iTOP-4412开发板开源硬件平台
  • nj04---事件回调函数
  • Oracle锁表查询和解锁方法
  • Java 中的事件监听机制
  • sed的使用
  • 第四章 利用函数实现指定的功能
  • Nginx虚拟主机配置实践(一)
  • 硬件设计中,总有一种想法让你冲动
  • Rokid开发者社区skill之【历史上的今天】
  • layer常用方法
  • Cehp-学习1
  • 二极管
  • 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.2 构建应用程序...
  • 蔚来汽车李斌:2025年无人驾驶将100%解放驾驶时间
  • hexo+github搭建个人博客
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Laravel核心解读--Facades
  • 将回调地狱按在地上摩擦的Promise
  • 判断客户端类型,Android,iOS,PC
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 在electron中实现跨域请求,无需更改服务器端设置
  • #《AI中文版》V3 第 1 章 概述
  • #pragma预处理命令
  • (libusb) usb口自动刷新
  • (TOJ2804)Even? Odd?
  • (二)学习JVM —— 垃圾回收机制
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Project Open Day(2011.11.13)
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [CSS]CSS 字体属性
  • [CTSC2014]企鹅QQ
  • [C语言]——分支和循环(4)
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [iOS]随机生成UUID通用唯一识别码
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [JAVA设计模式]第二部分:创建模式
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [luoguP2401] 不等数列
  • [MFC] MFC 获取指定窗口截图(大小可调)
  • [MySQL]视图索引以及连接查询案列
  • [redis] Jedis 与 ShardedJedis 设计
  • [Repo Git] manifests的写法
  • [RK3568 Android11] 时间同步机制
  • [Ubuntu 20.04] 使用Netplan配置网络静态IP
  • [vim]Python编写插件学习笔记1 - 开始
  • [单片机课程设计报告汇总] 单片机设计报告常用硬件元器件描述