windows编译tensorflow c++库
1. 准备
- windows 10系统、3.6GHz cpu、16G 内存
- visual studio 2017 or 2015
- 下载安装git
- 下载安装cmake
- 下载安装swigwin 如果不需要python bindings,可以跳过
- clone tensorflow
- 切换tensorflow到要进行编译的git tag
- 修改tensorflow/contrib/cmake/CMakeLists.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")
# 添加下面这部分
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()
# end of 添加下面这部分
endif()
endif()
2. 步骤
- cmd 运行vcvarsall.bat amd64设置指定环境参数
- cd目录:tensorflow\contrib\cmake
- 创建build目录,cd build
cmake命令
cmake .. -G "Visual Studio 15 2017 Win64" -T host=x64 -DCMAKE_BUILD_TYPE=Release ^
-Dtensorflow_VERBOSE=ON ^
-Dtensorflow_ENABLE_GRPC_SUPPORT=OFF ^
-Dtensorflow_BUILD_PYTHON_BINDINGS=OFF ^
-Dtensorflow_BUILD_CC_EXAMPLE=OFF ^
-Dtensorflow_BUILD_SHARED_LIB=ON ^
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX
#-DSWIG_EXECUTABLE=swig.exe的路径
#-DPYTHON_EXECUTABLE=python.exe的路径(anaconda3路径/python.exe)
#-DPYTHON_LIBRARIES=python35.lib的路径(anaconda3路径/libs/python35.lib)
上面的命令说明:
-G 指定生成目标版本。命令行输入cmake -G,可以查看可选的版本列表。
-T host=64 是网上很多教程忽略的一点,我之前也用VS2017编译过,因为没有指定-T host=64,导致使用了32位的编译器,出现fatal error C1060: "编译器的堆空间不足"的错误。
tensorflow_VERBOSE 编译时输出具体信息,设为ON些许降低编译速度。
tensorflow_ENABLE_GRPC_SUPPORT GRPC支持,如果你有服务器/客户端的业务需求,或者跨语言GRPC使用需求的话,选择ON。
tensorflow_BUILD_PYTHON_BINDINGS 需要编译python包的话选择ON。
tensorflow_BUILD_CC_EXAMPLE 编译测试代码。
tensorflow_BUILD_SHARED_LIB 编译共享库。
tensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX2 选择AVX还是AVX2,取决于你的CPU是否支持该指令集。
tensorflow_ENABLE_GPU 编译是否使用GPU。
tensorflow_OPTIMIZE_FOR_NATIVE_ARCH可设为OFF也可以不设置,会自动判断。
其他可选参数在 tensorflow\tensorflow\contrib\cmake\CMakeLists.txt 中可查看,对于你拿不准的参数,保持其默认即可。编译
MSBuild /p:Configuration=Release /p:Platform=x64 /verbosity:detailed tensorflow.vcxproj
这里强调一点,Configuration定义的要与cmake时DCMAKE_BUILD_TYPE定义相同- 运行测试
最新文章
- canvas arcTo()用法详解
- 使用pt-stalk分析MySQL的性能波动 (转)
- ajax中向HTML页面中指定位置添加信息
- [Java] Steam文件输入流
- 全部快捷方式图标变成LNK文件怎么办
- javascript对链接进行动态处理化
- Runtime运行时机制
- .Net中关于等于的故事(一)
- python操作随笔
- 线段树——习题、lazy解析
- PHP is_writeable 存在bug , 写一个自定函数 判断文件是否可写
- 选择监听事件ItemListener(是否被选择)
- 116A
- Java只给汉字转URLEncoder
- (转)使用 db2pd 命令进行监视和故障诊断
- kafka脚本
- IDEA重写toString()模板,转成json格式
- Process Pool实现Python的并行执行
- Nginx 分析access日志文件
- iOS完全自学手册——[二]Hello World工程
热门文章
- PTCSolution 关注
- [转]SSIS ADO.NET vs OLEDB
- php上传漏洞获root权限
- window进入本地组策略编辑器和计算机管理界面
- lumisoft邮件头不规范造成内容无法读取
- 如何在 CentOS 7 上安装 Percona Server
- 往aws中的s3上传数据
- scala 2.11报错error: not found: type Application
- Servlet3.0提供的异步处理
- 【翻译自mos文章】在11gR2 rac环境中,文件系统使用率紧张,而且lsof显示有非常多oraagent_oracle.l10 (deleted)