这里会逐渐补充。
编译时可以直接在powershell或者cmd或者Anaconda Prompt中执行bazel 命令编译。
编译过程中需要关掉360安全卫士,避免编译进程被杀死导致编译失败。
1、bazel编译tensorflow
(1)打开anaconda prompt
如果想使用不同版本的虚拟环境可以激活相应的虚拟环境,比如我有一个py35的虚拟环境。
conda activate py35
(2)配置项目
cd /d D:GitHub ensorflow-1.13.1
python configure.py
然后根据提示配置符合自己电脑的信息。
(3)编译项目:libtensorflow_cc.so、libtensorflow_framework.so和install_headers
编译之前,去到 ensorflow-master ensorflowBUILD文件里面好好看清楚
需要编译的是libtensorflow_cc.so、libtensorflow_framework.so和install_headers三个项目
install_headers项目会把所有H文件汇总,方便后面引用
cd tensorflow bazel build :libtensorflow_cc.so(BUILD文件tf_cc_shared_object(name="libtensorflow_cc.so")) bazel build :libtensorflow_framework.so(BUILD文件tf_cc_shared_object(name="libtensorflow_framework.so")) bazel build :install_headers(BUILD文件tf_cc_shared_object(name="install_headers"))
最后一条可以不用执行,因为它会将生成的文件安装到C盘,文件很大:
bazel build :install_headers(BUILD文件tf_cc_shared_object(name="install_headers"))
动态库生成到bazel-bin/tensorflow文件夹下,使用时libtensorflow_cc.so需要更名为tensorflow_cc.dll。不知道上面的命令libtensorflow_cc.so直接替换成tensorflow_cc.dll或者tensorflow.dll是不是可以编译成功,可以一试。
调用示例参考:https://blog.csdn.net/atpalain_csdn/article/details/97945536
2、上面编译的tensorflow是cpu版本的,编译GPU版本的命令如下。
编译c++ DLL GPU版本:
bazel build --config=opt --config=cuda --copt=-nvcc_options=disable-warnings //tensorflow:libtensorflow_cc.so
参考博客:https://blog.csdn.net/yyplc/article/details/104448153
参考博客:https://blog.csdn.net/sinat_19758811/article/details/90896639
3、build freeze_graph 工具( 需要 bazel ):
bazel build tensorflow/python/tools:freeze_graph
4、配置库路径
参考:https://blog.csdn.net/atpalain_csdn/article/details/97945536#Step4_tensorflow_110
按照上面的参考报错:
cannot open source file "tensorflow/core/framework/types.pb.h"
于是猜测,路径设置有问题,参考博客中include 目录下存放的tensordlow不应该是源文件下的tensordlow,而应该是编译后genfiles文件夹下的tensordlow文件夹,所以需要自己测试一下,我测试了一下,果然替换过来就可以了。(tensorflow-gpu版本发现上面这个问题)
参考:https://blog.csdn.net/atpalain_csdn/article/details/97945536
参考:https://blog.csdn.net/jin739738709/article/details/86705735