文章目录
- 前言
- 一、安装MSYS2
- 二、选择tensorflow的版本
- 三、安装Bazel
- 四、配置一个anconda的tensorflow环境
- 五、生成dll,lib,include
- 六、在vs2019中配置项目
- 七、测试并针对性修补问题
前言
不能使用vs2022配置tensorflow c++ api,即使要安装 2.10.0版本,也尽量使用vs2019
提示:以下是本篇文章正文内容,下面案例可供参考
一、安装MSYS2
安装MSYS2,
在环境变量中添加 Path,例如C:\msys64\usr\bin
然后,使用 cmd.exe 运行以下命令:
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++目录的 包含目录,库目录中
七、测试并针对性修补问题
#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,可以接着之前的编译结果接着编译
最后运行可用看见
大功告成!