tensorflow c++ api + windwos + vs部署 详细避坑

文章目录


前言

不能使用vs2022配置tensorflow c++ api,即使要安装 2.10.0版本,也尽量使用vs2019


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装MSYS2

安装MSYS2,

在环境变量中添加 Path,例如C:\msys64\usr\bin

然后,使用 cmd.exe 运行以下命令:

powershell 复制代码
pacman -S git patch unzip

二、选择tensorflow的版本

根据需要选择版本tensorflow

下载zip包到本地 解压

三、安装Bazel

下载exe文件 bazel

1.选择版本,如果是安装2.6.0以上的版本,在tensorflow github 库中查询可用的bazel版本

2.配置环境变量

在path中把bazel.exe文件的路径添加进去,并且在系统变量中添加


四、配置一个anconda的tensorflow环境

根据tensorflow版本选择要安装的python版本

然后 pip intsall tensorflow==x.xx.x(目标版本)

五、生成dll,lib,include

在下载的tensorflow源码的文件夹下,打开cmd

运行cofigure

要修改python.exe的路径为上一步配置的路径,我这里的配置是cpu版本

然后运行 bazel build --config=opt --config=v2 //tensorflow:tensorflow_cc.dll (--config=v2是设置编译tensorflow 2的api) 这一步可能需要魔法上网

然后运行bazel build --config=opt --config=v2 //tensorflow:tensorflow_cc.lib

最后运行bazel build --config=opt --config=v2 //tensorflow:install_headers

再tensorflow路径\bazel-bin\tensorflow 下可以看见

然后把python环境中的google文件夹复制到刚刚生成的include中

六、在vs2019中配置项目

把include文件夹添加到 VC++目录的 包含目录,库目录中




七、测试并针对性修补问题

cpp 复制代码
#include "tensorflow/cc/client/client_session.h"
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/tensor.h"
using namespace std;

int main() {
	using namespace tensorflow;
	using namespace tensorflow::ops;
	Scope root = Scope::NewRootScope();
	// Matrix A = [3 2; -1 0]
	auto A = Const(root, { {3.f, 2.f}, {-1.f, 0.f} });
	// Vector b = [3 5]
	auto b = Const(root, { {3.f, 5.f} });
	// v = Ab^T
	auto v = MatMul(root.WithOpName("v"), A, b, MatMul::TransposeB(true));
	std::vector<Tensor> outputs;
	ClientSession session(root);
	// Run and fetch v
	TF_CHECK_OK(session.Run({ v }, &outputs));
	// Expect outputs[0] == [19; -3]
	LOG(INFO) << outputs[0].matrix<float>();
	cout << "OK" << endl;
	return 0;
}

把tensorflow_cc.dll 放到项目的x64/Release文件夹下

如果运行报错

打开tensorflow\tools\def_file_filter\def_file_filter.py.tpl

找到

S编译项目后:LNK2001 无法解析的外部符号,例如: "public: __cdecl tensorflow::ClientSession::ClientSession(class tensorflow::Scope const &)" (??0ClientSession@tensorflow@@QEAA@AEBVScope@1@@Z)

打开E:\tensorflow_c++_tools\msys64\tensorflow\tensorflow\tools\def_file_filter\def_file_filter.py.tpl

接着下面安装对应格式添加进去def_fp.write("\t \n"),如上面的例子则添加def_fp.write("\t ??0ClientSession@tensorflow@@QEAA@AEBVScope@1@@Z\n")

添加进入之后再在cmd中编译lib、dll,可以接着之前的编译结果接着编译

最后运行可用看见

大功告成!

相关推荐
WBluuue5 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
木子墨5166 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
weixin_513449967 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
烟锁池塘柳08 小时前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象
yolo_guo8 小时前
glog单行 30000 字节限制问题
c++
cccccc语言我来了9 小时前
C++轻量级消息队列服务器
java·服务器·c++
闻缺陷则喜何志丹9 小时前
【背包 组合】P7552 [COCI 2020/2021 #6] Anagramistica|普及+
c++·算法·背包·洛谷·组合
xiaoye-duck9 小时前
【C++:C++11】C++11新特性深度解析:从类新功能、Lambda表达式到包装器实战
开发语言·c++·c++11
一个行走的民9 小时前
C++ Lambda 表达式语法详解
c++