windows7环境下tensorflow 用vs2015编译dll过程记录

 

目录

1、准备的环境

2、下载tensorflow源码,配置CMakeLists.txt

3、开始编译lib和dll

cmake 界面编译

cmake 命令行编译:

编译CPU版本:

编译GPU版本:

备注:

参考:


 

 

1、准备的环境

  • vs2015  需包含 Update 3   可在VS2015菜单中点击 帮助->关于 MicroSoft Visual Studio(A) 查看

       windows7环境下tensorflow 用vs2015编译dll过程记录_第1张图片

  • swig  官方下载地址,下载windows版本的(含有.exe文件),解压到指定目录,路径需要在cmake时指定
  • python,建议3.6或以上版本
  • CMake,官网下载地址
  • Git,官网下载地址。
  • cuda及cudnn,本文编译tensorflow的是1.8版本,cuda要求9.0,cudnn要求7,配置方法可以百度。

 

2、下载tensorflow源码,配置CMakeLists.txt

打开网址 https://github.com/tensorflow/tensorflow/tree/r1.8,选择右侧的Download ZIP,下载源码。

windows7环境下tensorflow 用vs2015编译dll过程记录_第2张图片

下载进行解压,本文解压到“D:\code\”目录下。

在加压的源码文件夹内,找到tensorflow/contrib/cmake/CMakeLists.txt打开,找到第155行到161行,将

if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH)
  include(CheckCXXCompilerFlag)
  CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
  if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
  endif()
endif()

修改替换为

if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH)
  include(CheckCXXCompilerFlag)
  CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
  if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
  else()
    CHECK_CXX_COMPILER_FLAG("/arch:AVX" COMPILER_OPT_ARCH_AVX_SUPPORTED)
	if(COMPILER_OPT_ARCH_AVX_SUPPORTED)
	  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
	endif()
  endif()
endif()

3、开始编译lib和dll

  • cmake 界面编译

打开cmake界面,

配置源路径:D:/code/tensorflow-r1.8/tensorflow/contrib/cmake

配置生成路径:D:/code/tensorflow-r1.8/build_cpu

点击configure,选择 Visual Studio 14 2015 Win64 编译器,如下图

windows7环境下tensorflow 用vs2015编译dll过程记录_第3张图片

点击configure后,可能会出现错误,查看下方详细信息:可能是python环境问题,安装python环境,

SWIG_EXECULABLE路径找不到问题,手动设置SWIG_EXECULABLE为解压后的exe路径:D:/code/tensorflow_dll/swigwin-4.0.0/swig.exe。

所有错误解决后,

windows7环境下tensorflow 用vs2015编译dll过程记录_第4张图片

根据需要自行勾选编译选项,再configure+generate, 我这里编译只是为了用C++接口加载训练好的模型文件,所以把不需要的都去掉了。 再点击Generate, Open Project, 用VS2015打开,

点击ALL_BUILD 生成, 边缘结果如下

有一些失败的情况,

fatal error C1083: 无法打开包括文件: “tensorflow/core/framework/device_attributes.pb_text.h”:

fatal error C1083: 无法打开包括文件: “tensorflow/core/framework/device_attributes.pb_text.h”:

这个模式网上查找了很多资料,最后没有很好解决。看到https://blog.csdn.net/dageda1991/article/details/79721333博主使用命令行编译,也做了尝试,终于编译成功。

 

  • cmake 命令行编译:

vs2015自带的编译工具,如下图

windows7环境下tensorflow 用vs2015编译dll过程记录_第5张图片

打开后,切换目录到“D:/code/tensorflow-r1.8/tensorflow/contrib/cmake”,在建立一个“build_cpu”文件夹并进入

windows7环境下tensorflow 用vs2015编译dll过程记录_第6张图片

然后执行如下命令:

 

编译CPU版本:

cmake .. -A x64 -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE=Release -DSWIG_EXECUTABLE=D:/code/tensorflow_dll/swigwin-4.0.0/swig.exe  -Dtensorflow_ENABLE_GPU=OFF -Dtensorflow_BUILD_PYTHON_BINDINGS=OFF -Dtensorflow_ENABLE_GRPC_SUPPORT=OFF -Dtensorflow_BUILD_SHARED_LIB=ON 

 

windows7环境下tensorflow 用vs2015编译dll过程记录_第7张图片

等待完成后,执行:

MSBuild /p:Configuration=Release ALL_BUILD.vcxproj

windows7环境下tensorflow 用vs2015编译dll过程记录_第8张图片

等待编译完成,出现了358个警告,一个错误,但没关系。在工程目录的Realese文件夹内,已经生成了tensorflow.dll和tensorflow.lib。

windows7环境下tensorflow 用vs2015编译dll过程记录_第9张图片

 

编译GPU版本:

和CPU版本类似,先建立一个bulid_gpu文件夹并进入

GPU 需要安装cuda9.0,cudnn要求7,安装完cuda后把cudnn64_7.dll直接拷贝到了C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin。

对于安装了多个版本cuda的情况,需要修改 系统变量:CUDA_PATH :  为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

然后执行命令

cmake .. -A x64 -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE=Release -DSWIG_EXECUTABLE=D:/code/tensorflow_dll/swigwin-4.0.0/swig.exe  -Dtensorflow_ENABLE_GPU=ON -Dtensorflow_BUILD_PYTHON_BINDINGS=OFF -Dtensorflow_ENABLE_GRPC_SUPPORT=OFF -Dtensorflow_BUILD_SHARED_LIB=ON 

等待完成后,执行:

MSBuild /p:Configuration=Release ALL_BUILD.vcxproj

漫长的等待,编译完成后,在工程目录的Realese文件夹内,可以看到生成的GPU版的tensorflow.dll和tensorflow.lib。

windows7环境下tensorflow 用vs2015编译dll过程记录_第10张图片

 

备注:

  • tensorflow个版本之间差别较大,本文编译1.8.0版本,对于1.10版本及以上版本,用同样的办法,无法边缘成功。
  • https://github.com/fo40225/tensorflow-windows-wheel 有编译好的不同版本tensorflow windows dll,可直接下载。

 

参考:

windows10+vs2015下编译GPU版本tensorflow得到lib和dll(附带C++ inference示例)

Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

windows环境VS2015编译TensorFlow C++程序完全攻略

 

你可能感兴趣的:(tensorflow)