Wind10环境,Visual Studio2017下用Bazel编译Tensorflow(失败转调用编译好的包配置使用Tensorflowc++)

工具和环境

Bazel编译Tensorflow的Visual C++环境

步骤

1

  • 按照第二个参考博客安装并配置Bazel,并放入MSYS2根目录C:\msys64;设置两个环境变量 BAZEL_SH,BAZEL_VC,结果在后面下载并编译Tensorflow环节,执行python configure.py发现无反应,遂直接将Bazel.exe复制到Tensorflow文件夹里面,后续需要Bazel的也是直接复制到对应的文件夹

2

  • 安装Anaconda3,使用3.6的虚拟环境,在conda Prompt终端输入conda create -n py36 python=3.6

3

  • 启动 VS2017 x64 命令行,,激活Anaconda环境,在命令行内执行如下语句cmd.exe “/K” C:\Users\Intel\Anaconda3\Scripts\activate.bat,其中activate.bat文件所在位置需要根据具体情况更改,切换到python36环境,语句为:conda activate py36使用 anaconda 安装 numpy, cython,keras,语句为:conda install numpy cython keras

4

  • 编译(仍在上面的命令行下):下载 tensorflow到 d:/lib,并切换当前目录到 d:/lib/tensorflow此时采用第一个参考博客,Bazel编译部分,编译libtensorflow_cc.so、libtensorflow_framework.so和install_headers,此处主要注意切换目录到相应位置,是切换到里面的tensorflow文件夹,然后将Bazel.exe复制到该目录下,或者不切换,build时候在build后面添加目录也行
    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"))
    

5

  • 多次编译失败后终于成功编译,主要是配置选项设置,可以多做尝试,反正肯定不会一次成功,注意每次尝试将之前的编译产生的bazel_bin等四个文件夹删除

6

  • 仍旧安照第一篇博客,将编译后的库文件等文件配置到VS2017,添加H文件引用没变照抄,lib文件因为每个人编译环境和编译选项不同,不要用别人的,自己将要bazel-bin中所有.lib文件都列出来,这需要写一个批量处理程序,可以用python写一个,就很快然后,链接器->输入->附加依赖项添加.lib,链接器->常规->附加库目录添加lib路径,bazel-bin\tensorflow\core\文件下所有lib文件以及子目录下的所有lib文件最后,将core文件夹里面的lib文件添加到链接器->命令行->其他选项添加/WHOLEARCHIVE:*.lib

7

  • 结果仍然是失败,显示很多未解析的外部符号,问csdn网友得到回答是bazel没有把其他的lb连接到libtensorflow_cc.lib的问题最后选择放弃,直接用第三个博客里面网友编译好的Release版本,我放到Release文件夹了,可直接获取使用。

##参考链接

#####资料一 TensorFlow 1.13 在 windows 上的构建

#####资料二 【软件安装】WIN10 + Tensorflow1.12 C++接口 + Cmake编译 + Bazel编译 + C++接口

#####资料三 windows10+vs2015下编译GPU版本tensorflow得到lib和dll(附带C++ inference示例)