概述
整个编译打包过程的总体思路,是参照在linux
下的编译流程,配置环境,执行编译命令,根据编译器/链接器反馈的错误,修改相应的源码或者相关库文件的存放路径,编译出windows
平台下静态库和二进制执行文件。
TIP
:在碰到很多编译错误的时候,适当避开某些不好解决的第三方依赖库(libevent,gflag,glog
),把流程走通,再回头解决外部依赖库的问题。
Windows编译环境搭建
说明:本教程中部分路径的展示沿用了linux
教程中正斜杠的用法,未予修改。凡是非linux
沿用命令及输出信息中的路径,均采用windows
平台下的反斜杠。两种分隔方式除特别说明,在windows
平台下可以混用。
安装Bazel
下载bazel
的windows的安装包,版本要求>=3.7.2。在页面中找到 bazel-<version>-windows-x86_64.exe
,如bazel-3.7.2-windows-x86_64.exe
改名为bazel.exe
,并将该文件所在目录放到%PATH%
目录,打开命令行窗口,可以搜索到bazel
即可。
D:\TFServing\serving>bazel --version
bazel 3.7.2
安装Visual Studio 2019
进入visual studio 2019安装包下载界面,选择社区版,按提示安装即可。可参考安装教程。
安装Python及附属包
选择python3.9
,进入下载界面,找到对应版本,参考教程。在安装时将pip
一起安装,后需用pip
安装其他工具包比如numpy
等。
其他工具
这里主要是git,msys2,patch,git
的安装方式可参考教程。
msys2
是在windows
上模拟linux
环境,安装后可以在window
上执行linux
上的程序。安装教程可参考资料。
pacman -Syu
pacman -Su
pacman -S patch unzip
配置环境变量
将上面安装的所有工具的二进制包添加到环境变量:
在系统变量中添加变量名BAZEL_SH,BAZEL_VC,BAZEL_VS
,并设置相应的路径。
D:\msys64\usr\bin\bash.exe #BAZEL_SH
D:\Program Files\Microsoft Visual Studio\2019\Community\VC #BAZEL_VC
D:\Program Files\Microsoft Visual Studio\2019\Community #BAZEL_VS
%PATH%
中需添加:
D:\Bazel #bazel.exe所在目录
D:\ProgramData\Python\Python39 #python39.exe所在目录
D:\msys64\usr\bin #msys2中安装的软件所在目录
下载源码
下载tensorflow serving
的源码:
git clone https://github.com/tensorflow/serving.git
cd serving
通过分析依赖层级结构,获取所有依赖库源码:
bazel fetch --experimental_repo_remote_exec tensorflow_serving/model_servers:tensorflow_model_server
注意:fetch
可以通过分析依赖层级关系,下载对应的工程文件,可通过--repository_cache d:\BazelCache
选项,指定目录存放所有下载的源码文件,也可参考下一节中的bazel
配置文件修改存放位置。如遇到下载不成功,重复执行即可。直到显示
D:\TFServing\serving>bazel fetch --experimental_repo_remote_exec tensorflow_serving/model_servers:tensorflow_model_server
Starting local Bazel server and connecting to it...
DEBUG: D:/bazelcache/z4avbakx/external/org_tensorflow/third_party/repo.bzl:109:14:
Warning: skipping import of repository 'icu' because it already exists.
INFO: All external dependencies fetched successfully.
Loading: 301 packages loaded
表示全部工程文件下载完毕。
源码修改
tensorflow serving
的源码文件是通过git clone
命令下载到本地,而所有依赖库文件包括tensorflow
, libevent
等都存放在指定的bazel
缓存目录。这里以进入serving
根目录下开始
cd serving
Bazel
编译脚本的修改
-
打开
.bazelrc
文件,在文末加入startup --output_user_root=D:\BazelCache
表示将所有依赖的外部库源码下载到这个目录,且编译中生成的中间文件,缓存文件,静态库以及二进制文件均存放此目录。此操