windows10环境下使用bazel编译lib tensorflow_cc.so C++(CPU版)

2023-11-23 01:00

本文主要是介绍windows10环境下使用bazel编译lib tensorflow_cc.so C++(CPU版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因工作需要,需要在win10环境下将TensorFlow在C++的环境下进行编译。本教程记录本人在安装环境下遇到的问题,供有相同或者类似的小伙伴借鉴。如有问题,欢迎指正

1. 安装列表

在安装前需要准备
Mysys2
bazel-0.19.1
TensorFlow-1.13.0-rc2
Visual C++2015(需要更新至update2及以上版本

以上资源我上传至百度云盘链接: [https://pan.baidu.com/s/1_5CB2Q1WROLoPlLR-UHSMQ]
提取码:3bru(如有过期,请与我联系,可以单独发送)

2.安装顺序

2.1本机安装Mysys2

msys2是可以在windows下搭建gcc开发环境的集成平台,非常好用。
win10环境安装可以参考,亲试可行,需要注意的是在安装完成后,可以将资源换成国内 https://mirror.tuna.tsinghua.edu.cn/help/msys2/ 这样下载起来方便许多
常用pacman 命令列表如下:

pacman -Syu: 升级系统及所有已经安装的软件。
pacman -S 软件名: 安装软件。也可以同时安装多个包,只需以空格分隔包名即可。
pacman -Rs 软件名: 删除软件,同时删除本机上只有该软件依赖的软件。
pacman -Ru 软件名: 删除软件,同时删除不再被任何软件所需要的依赖。
pacman -Ssq 关键字: 在仓库中搜索含关键字的软件包,并用简洁方式显示。
pacman -Qs 关键字: 搜索已安装的软件包。
pacman -Qi 软件名: 查看某个软件包信息,显示软件简介,构架,依赖,大小等详细信息。
pacman -Sg: 列出软件仓库上所有的软件包组。
pacman -Sg 软件包组: 查看某软件包组所包含的所有软件包。
pacman -Sc:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。
pacman -Scc:清理所有的缓存文件。

2.2安装Bazel

可以在将下载后的Bazel 进行解压,获取指定的exe 文件,将该文件放入之前配置好的msys2的环境变量中即可(保证msys2环境变量配置成功的条件下)
测试:
打开cmd,输入命令bazel version ,出现下图则安装成功
在这里插入图片描述

2.3 安装Visual Studio C++2015 社区版 (需要更新至update2及以上

  1. 解压下载后的文件如下
    在这里插入图片描述

  2. 双击vs_xxxxx.exe 开始安装操作,出现等待界面,需要等待一会。
    在这里插入图片描述

  3. 初始化安装程序,这个操作也需要等待一会在这里插入图片描述

  4. 选择安装位置和安装方式。
    在这里插入图片描述

  5. 选择要安装的组件。
    因为我是C++开发,只会用到C++相关的组件,所以这里我只选择了"Visual C++",个人可根据实际情况进行选择
    在这里插入图片描述

  6. 选择完之后点击下一步,弹出下图,点击“安装”按钮开始安装。
    在这里插入图片描述

  7. 开始安装,安装的时间有点长 40分钟左右,和卸载时间差不多。
    在这里插入图片描述

  8. 安装完成,有时需要重启电脑那就按照提示重启一下,若没有提示,则直接启动VS(如有部分安装失败,请检查一下原因,本人安装过程中,1.遇到过一次C盘存储不足的情况,2.编译的时候存在 相关文件不存在的情况,需要在 电脑中 找到安装程序,进行修复
    在这里插入图片描述

  9. 首次使用VS还需要简单的设置,主要是开发环境和主题风格。
    启动VS2015,提示登录,若有账户点击“登录”,若没有选择"登录"按钮下的“以后再说”,如下图
    在这里插入图片描述

  10. 选择环境配置。
    在这里插入图片描述
    我选择了Visual C++,之后下面的主题颜色,选择自己喜欢的就行,这个只影响编码器的视觉效果。

  11. 选择完成之后,点击“启动 Visual Studio(S)”按钮启动,需要几分钟的准备过程。
    在这里插入图片描述

  12. 如使用起来存在问题,可以尝试本机修复,本次耗时和安装耗时相近,本人是通过这种方式 解决了文件在编译过程中 VCVARSALL.BAT, cl.exe, link.exe, lib.exe, ml64.exe 以上文件缺失的问题
    在这里插入图片描述

  13. 因本次在编译过程中提示需要VS2015 update2及以上版本。所以本次直接在安装时 直接进行安装更新即可在这里插入图片描述
    以上操作完成,基础环境安装完成,即可进行软件编译相关操作了

3.配置环境变量

BAZEL_SH C:\msys64\usr\bin\bash.exe
BAZEL_VC C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

在这里插入图片描述

4.软件编译

  1. 进入tensorflow根目录下
    在这里插入图片描述
    打开powerShell 或者cmd 进入到以上文件夹路径(管理员权限进来最好)

python ./configure.py
在这里插入图片描述

  1. 果断暴躁编译
    bazel build --config=opt --config=monolithic //tensorflow:libtensorflow_cc.so
    如果编译成功,则会在下面文件夹里面出现libtensorflow_cc.so
    在这里插入图片描述
    主要借鉴博客地址为:https://blog.csdn.net/qq_37268614/article/details/86440425?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

这篇关于windows10环境下使用bazel编译lib tensorflow_cc.so C++(CPU版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414185

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1