• TensorFlow Lite 版的编译


    背景:

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

    看到了其内部使用了 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,需要改整个工程,这玩意,可以了。

  • 相关阅读:
    get和post的区别?
    JSP中动态include和静态include的区别?
    怎么防止重复提交
    如何解决表单提交的中文乱码问题
    http的响应码200,404,302,500表示的含义分别是?
    JSP三大指令是什么?
    session 和 cookie 有什么区别?
    Servlet API中forward()与redirect()的区别?
    Servlet的生命周期
    爬虫之Xpath的使用
  • 原文地址:https://www.cnblogs.com/suanguade/p/16305193.html
Copyright © 2020-2023  润新知