ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TensorFlow Lite 版的编译

2022-05-24 13:32:36  阅读:228  来源: 互联网

标签:git cmake 编译 tf lite tensorflow Lite TensorFlow


背景:

我在若干年前,在看一个类似于坦克大战的游戏的时候,

看到了其内部使用了 tf lite 的机器学习库,那个时候,我就对它有点兴趣,

后来由于工作原因,代码忘记了,

直到最近,想做点东西,想把这玩意拿回来,继续搞,开始,我自己编译一套库吧。

 

这里我只编 _c 的项目,因为我需要用它。

 

预先安装 VS2022,2019也可以,2017有可能不行。

因为如果用VS系列编译,需要使用一个C++20的新特性,IDE版本太低,可能无法支持。

我这里使用的是 2022。

预先安装 git。

 

其实,TF lite 的完整编译过程在网上有现成的说明,且是中文的,地址:

https://www.tensorflow.org/lite/guide/build_cmake

但是,编译过程中,可能遇到点问题,这里就简单地说一下。

 

1:下载 tf lite 代码,简单git 就可以了

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

 

2:找个放tf lite 项目的目录,比如,路径叫 lite

然后启动 vs2022 的命令行工具

x64 Native Tools Command Prompt for VS 2022

当然了,用x86版本的也可以,看需求

 

3:在 vs2022 命令行下,进入lite 目录,

开始编译 tf,

由于我这里要编译的是 _c 库,所以我可以直接指向 c 目录创建项目,具体命令如下

cmake G:/tensorflow_src/tensorflow/lite/c

静待完成即可,缺库,cmake会自己去下库,中间可能要卡很久,因为它在用git 下库。

但是,这里有个很严重的问题是,此目录下的 CMakeList 文件里面有一处代码错误,导致 tensorflowlite_c 项目生成会失败,

具体修复方式是这样的

 

这逼代码都cc的,弄个 c 的common,啥意思,改完之后,就可以了,

这个文件cmake也会改,但是没关系,不管它即可。

 

 

4:前面都做完了,

这里直接编译即可

cmake --build . -j

很简单吧,

 

5:第一个坑

但是第一次编译肯定是不成功的,

因为它用了一个g++才支持的特殊语法,结构指定成员初始化,

问题出在这里,修改 tf lite 项目的配置,语言标准使用 c++20 ,第一个坑就绕过了。

 

 

6:第二个坑,

编译的时候,会出现另一种情况,就是

 

这是什么鬼,可怜,一点办法都没有,那么这个宏也要改,

 

 重定义一下这个宏,

然后 tf lite 项目即可编过

 

7:第三个坑

然后编译 tf lite c 项目,可以顺利编译完成,

但是默认配置编译完成的模块,没有函数导出,

原因是 tf lite c 模块中,

 

静态库的宏,最初是开着的,且没有 _WIN32 的宏,所以需要改项目配置

 

增加 _WIN32 的宏,关掉静态库的宏,

 

至此,才算可以一步到位,全部完成。

 

 

 

 

 

 

 文件还是不小的,

 

但是,到这里,可以看到,突然发现的问题是,只有dll,没有头文件,咋整,

其实不用整,

tensorflowlite_c

项目下的 c_api.h 已经把头文件给我整理好了,

只是如果直接用它的话,需要在当前目录下创建个项目,或者将tf 的目录加入 include 目录,否则 tf 的头文件就找不到了,

如果不想这么搞就只能单独扒头文件了,很费事,文件太多,我放弃了,

反正这帮逼都是一个德行,

你编个linux驱动,需要有linux内核,搞个llvm,需要改整个工程,这玩意,可以了。

 

标签:git,cmake,编译,tf,lite,tensorflow,Lite,TensorFlow
来源: https://www.cnblogs.com/suanguade/p/16305193.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有