這里會逐漸補充。
編譯時可以直接在powershell或者cmd或者Anaconda Prompt中執行bazel 命令編譯。
編譯過程中需要關掉360安全衛士,避免編譯進程被殺死導致編譯失敗。
1、bazel編譯tensorflow
(1)打開anaconda prompt
如果想使用不同版本的虛擬環境可以激活相應的虛擬環境,比如我有一個py35的虛擬環境。
conda activate py35
(2)配置項目
cd /d D:\GitHub\tensorflow-1.13.1
python configure.py
然后根據提示配置符合自己電腦的信息。
(3)編譯項目:libtensorflow_cc.so、libtensorflow_framework.so和install_headers
編譯之前,去到\tensorflow-master\tensorflow\BUILD文件里面好好看清楚
需要編譯的是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