【Tensorflow】Windows以cmake+visual studio方式编译cpu版tensorflow.dll和tensorflow.lib

版权声明:本文为博主原创文章,未经作者允许请勿转载。 https://blog.csdn.net/heiheiya https://blog.csdn.net/heiheiya/article/details/89243971

准备:visual studio 2015 update 3

           git

           Cmake v3.6.3

           python3.6

           tensorflow r1.8

           swigwin

因为官方已经放弃对cmake方式的支持了,所以新版本的tensorflow用cmake方式编译是很难成功的。官方推荐用bazel方式编译,虽然能编译出lib,但是特别坑的是没有导出符号,导致在使用库的时候会出LNK 2001错误。这里我试了tensorflow r1.13、tensorflow r1.12、tensorflow r1.11、tensorflow r1.9都没编译成功,最后回退到tensorflow r1.8版本。


一、CMakeLists.txt

修改tensorflow/contrib/cmake/CMakeList.txt,将

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()

二、cmake

在tensorflow/contrib/cmake下新建一个build文件夹,打开cmake-gui

Where is the source code选择:tensorflow/contrib/cmake

Where to build the binaries选择:tensorflow/contrib/cmake/build

点击Configure,

选择Visual Studio的版本,点击Finish。

这是第一次configure之后的配置,

按照自己的需求修改如下:

注意勾选tensorflow_BUILD_SHARED_LIB,取消勾选tensorflow_ENABLE_GRPC_SUPPORT。

再次点击Configure,这下没有红色了。

点击Generate。输出如下信息表示已经成功生成工程文件了。

三、编译tensorflow

打开tensorflow.sln。

按照【Tensorflow】Windows编译tensorflow时LINK : fatal error LNK1181: 无法打开输入文件“\pywrap_tensorflow_internal.lib修改几个工程的配置属性。

选择项目ALL_BUILD生成。

全部生成成功之后,选择生成INSTALL项目,会把相应的bin文件,头文件和库文件拷贝到cmake配置时设置的CMAKE_INSTALL_PREFIX路径下。

其中,bin文件夹

include文件夹

lib文件夹

至此,cpu版本的tensorflow dll和lib编译过程结束。

四、测试

测试一下是否正确编译了,在bin文件夹下有一个tf_tutorials_example_trainer.exe,在cmd中运行它,如果输出类似如下内容,则证明编译是ok的。


在编译过程还有可能遇到的错误请参考链接:

【Tensorflow】windows编译tensorflow.sln的INSTALL时 error MSB3073: 命令“setlocal.... "

猜你喜欢

转载自blog.csdn.net/heiheiya/article/details/89243971