前言
开始编译前,务必做好持久战的准备!
准备工作
1.一台centos6.5的linux机子。推荐安装虚拟机,很多操作需要root权限。https://www.jianshu.com/p/18207167b1e7
2.配置yum源。https://www.cnblogs.com/mchina/archive/2013/01/04/2842275.html
开始编译
1.安装java
yum install java-1.8.0-openjdk-devel
2.安装devtoolset-6-toolchain
我是通过yum安装成功的
yum install devtoolset-6-toolchain
3.安装依赖包
yum install python27 python27-numpy python27-python-devel python27-python-wheel
4.安装bazel
scl enable devtoolset-6 bash
# download distribution archive
wget https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-dist.zip
unzip bazel-0.10.0-dist.zip -d bazel-0.9.0-dist
cd bazel-0.9.0-dist
# compile
./compile.sh
# install
mkdir -p ~/bin
cp output/bazel ~/bin/
# exit from Software Collection environment
exit
5.下载tensorflow
scl enable devtoolset-6 python27 bash
# clone source code repository
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
# select version (optional)
git checkout v1.4.0
6.修改tensorflow/tensorflow.bzl
#修改前
def tf_extension_linkopts():
return [] # No extension link opts
#修改后
def tf_extension_linkopts():
return ["-lrt"]
7.修改repositories.bzl和workspace.bzl
所有的check_version("...") 改成check_version("0.10.0")
其中repositories.bzl的路径是~/.cache/bazel/_bazel_nvidia/xxx/external/io_bazel_rules_closure/closure/repositories.bzl,xxx是_bazel_nvidia文件夹下的一个名字很长的文件夹
#修改前
_check_bazel_version("Closure Rules", "0.4.5")
#修改后
_check_bazel_version("Closure Rules", "0.10.0-")
这是bazel的一个比较搞笑的bug,它会认为0.10.0比0.4.5版本低
8.编译tensorflow
./configure
#所有的y/n都选n,不是就选默认
bazel build --config=opt --cxxopt='lrt' --incompatible_load_argument_is_label=false --incompatible_disallow_uncalled_set_constructor=false //tensorflow/tools/pip_package:build_pip_package
9.不要放弃
基本上只要把用到链接库的地方改成‘lrt’就能编译成功,java版本的编译类似。
后记
部分命令记不清了,如果有还有bug请自行解决,解决的核心就是‘lrt’。
参考资料
https://blog.abysm.org/2016/06/building-tensorflow-centos-6/
https://bleedingfight.github.io/2018/01/18/tensorflowforjava/
http://aifuns.cc/2017/10/08/so-file-in-C.html