win10 C++编译tensorflow动态库

本文分享如何将github上的tensorflow源码编译成动态库即.dll文件,以实现使用C++接口调用训练好的.pb模型文件。

 

系统环境:win10

tensorflow版本:r1.10

vs版本:VS2015 update3

cmake版本:3.6.3

swigwin版本:3.0.10

cuda版本:9.0

cudnn版本:7.0

git版本:2.9.2

注:将cmake.exe与swig.exe所在目录添加至系统环境变量

       本文编译的是gpu版本,cpu版本应该大同小异。

       内存要求,越大越好,最少16g

 

编译前请正确安装以上软件,cuda及cudnn的安装可参考我以前写的一篇文章。

一、下载tensorflow源码

请自行至github搜索tensorflow,注意选择r1.10分支,下载并解压

在 tensorflow-r1.10/tensorflow/contrib/cmake 路径下新建build文件夹

二、修改文件

修改 tensorflow/contrib/cmake/external/ 路径下的grpc.cmake文件

将位于 18 行 GRPC_URL 后的链接改为 https://github.com/lzkmylz/grpc  

将位于 20 行 GRPC_TAG 后的校验码改为 4446434eab7bfa9c7af000fc043ce9ecc267efdd 

因为编译时需要从链接地址下载资源,原链接资源被删除,故需修改重新指向其他资源。

三、生成.sln工程

打开cmake.gui

选择源码目录,即(一)中提到的cmake文件夹的绝对路径

选择生成工程存放的路径,即新建的build文件夹路径 

勾选grouped与advanced

点击configure

勾选 tensorflow_ENABLE_GPU 与 tensorflow_BUILD_SHARED_LIB

再次configure,直至没有红色的配置项,然后点击generate

四、编译

打开 VS2015 x64 x86 兼容工具命令提示符

切换至build目录

键入tensorflow.sln回车即打开工程

切换生成模式至Release(非常重要,因为tensorflow只支持Release与RelwithDebuginfo两种生成模式)

将 $(SolutionDir) 添加到 tf_core_kernels 项目的包含目录中 

给最上面这五个前面带下划线的项目的附加库目录添加 $(SolutionDir)$(Configuration); 

右键 ALL_BUILD,生成。

i7-7700k大概编了三个多小时,用笔记本编的可以去睡一觉了。

展示一下成果

参考:
https://blog.csdn.net/gyp2448565528/article/details/88383764
https://www.jianshu.com/p/d46596558640

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们需要在Python中调用C++程序时,我们通常会选择将C++程序编译动态库(.dll或.so文件),然后在Python中引用它。下面是一些步骤: 1.编写C++程序并将其编译动态库,例如Windows平台上的.dll文件或Linux平台上的.so文件。 2.使用Python中的ctypes模块来加载动态库,并调用其中定义的函数。这个过程需要知道动态库中函数的名称和参数类型。 3.在Python中调用动态库中的函数,获取返回值并进行处理。 以下是一个简单的示例代码: 假设我们有一个C++程序,包含一个名为add_numbers的函数,它接受两个整数并返回它们的和。 ```c++ // add_numbers.cpp #include "add_numbers.h" int add_numbers(int x, int y) { return x + y; } ``` 我们可以将其编译为Windows平台上的.dll文件,使用以下命令: ``` g++ -shared -o add_numbers.dll add_numbers.cpp ``` 在Python中,我们可以使用以下代码来加载动态库,并调用其中的函数: ```python import ctypes # 加载动态库 add_numbers_lib = ctypes.WinDLL('add_numbers.dll') # 获取函数 add_numbers = add_numbers_lib.add_numbers # 设置参数类型 add_numbers.argtypes = [ctypes.c_int, ctypes.c_int] # 设置返回值类型 add_numbers.restype = ctypes.c_int # 调用函数 result = add_numbers(1, 2) print(result) # 输出3 ``` 相关问题: 1. C++程序编译动态库有哪些优点? 2. Python如何加载动态库? 3. 如何在Python中调用动态库中的函数?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值