下载bazel
注意留意bazel与tensorflow的版本,文章使用的是tensorflowr9 和bazel12
1.先安装java
sudo apt-get install openjdk-8-jdk
2.安装bazel
sudo chmod +x sudo chmod +x bazel-0.12.0-installer-linux-x86_64.sh
./bazel-0.12.0-installer-linux-x86_64.sh --user
3.编译tensorflow
我使用的是c++库,所以只需要libtensorflow_cc.so
配置
./configure
全选no,后期可能会考虑cuda
编译
tensorflow编译的时候,需要下载很多依赖的外部包,这些包直接下载很容易失败,所以建议离线安装,首先下载好对应的包,放在本地
以grpc为例:
1.在tensorflow/workspace.bzl中查看grpc对应下载地址:https://github.com/grpc/grpc/archive/69b6c047bc767b4d80e7af4d00ccb7c45b683dae.tar.gz
2.直接下载到本地
3.搭建本地的简单服务器
#coding:utf-8
from flask import Flask, request, jsonify, send_from_directory, abort
import os
from flask import make_response
app = Flask(__name__)
@app.route("/download/<filename>", methods=['GET'])
def download_file(filename):
cur_dir = os.getcwd()
files_dir = os.path.join(cur_dir, 'download_files')
response = make_response(send_from_directory(files_dir, filename, as_attachment=True, mimetype='application/octet-stream'))
response.headers["Content-Disposition"] = "attachment; filename={}".format(filename.encode().decode('latin-1'))
return response
@app.route('/hello')
def hello():
return 'Hello world.'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8888)
然后将workspace.bzl中grpc中对应的地址修改成本地服务器的地址
下面这一步好像没用,但是我也操作了
bazel build --config=opt --config=monolithic //tensorflow/tools/pip_package:build_pip_package
编译过程中,安装了numpy 和mock
sudo pip install numpy
sudo pip install mock
build之前需要先编译安装protobuf 和eigen(一个矩阵运算库)
bazel build --config=monolithic -c opt --verbose_failures //tensorflow:libtensorflow_cc.so
其中-c opt 是 --config=opt 的简写
如果不加–config=monolithic,编译出来的库会导致cv::imread() 为空,和opencv的jepg库冲突
添加了导入库的时候,只需要导入libtensorflow_cc.so,不再需要libtensorflow_framework.so
#同时导入libtensorflow_cc.so,libtensorflow_framework.so 还碰到过protobuf不一致的冲突问题