随便吐槽下:
前段时间因为项目的原因在ARM上配置了tensorflow以及tensorflow lite的ARM NN SDK环境(有兴趣的朋友可以去看看传送门),因为最近板子还没有到,就想先试一下在pc上配置一下linux上的tensirflow的C++环境。这边文章主要记录一下在配置tensorflow的C++环境时的步骤以及踩到的坑。总的来说,之所以去编译,就是为了以后方便在自己做的东西上面使用google的tensorflow库。找了一圈发现大致有两种方法,一种是把项目放到tensorflow源码中,然后利用bazel编译,这样编译时间较长,而且编译出来的二进制文件较大。另一种是将tensorflow的静态库编译出来拿到项目中使用,这种方法易于管理。这篇文章主要讲的就是第二种方法。
准备工作:
首先下载tensorflow的源码(这里有个坑,建议不要直接克隆master分支,这里我也不知道为啥,下载了master分支里面没有contrib文件夹,而下载指定版本就有,希望有懂的大佬可以指导一下):
# 下载指定的版本1.14.0
git clone -b v1.14.0 https://github.com/tensorflow/tensorflow.git
# 进入tensorflow文件夹
cd tensorflow
# 配置tensorflow
./configure
这里的./configure可以配置也可以不选择配置,如果需要配置的话可以参照官网的选项说明进行配置,我这里没有选择配置。接下来需要安装对应版本的bazel和gcc,查看官网推荐来选择对应版本,这里我贴出了linux的版本要求:
我用的是tensorflow-1.14.0,选择的是python2.7、GCC 4.8、Bazel 0.24.1。
因为linux18.04默认版本为gcc-7,所以需要降低版本,降低gcc版本的方法推荐使用命令:
# 直接apt安装需要的版本
sudo apt-get install gcc-version
# 设置链接组优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10
# 使用配置命令可以手动选择
sudo update-alternatives --config gcc
bazel安装推荐官网下载.sh文件直接安装,安装方法——>传送门
然后安装一下python和tensorflow的一些依赖:
# python组件(如果是python3则改成后面那种)
sudo apt install python-dev python-pip(python3-dev python3-pip)
# tensorflow依赖项
pip install -U --user pip six numpy wheel setuptools mock
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps
这里建议再安装一下future:pip install future,
不然后面用bazel编译时会报错:importError:No module named builtins
编译源码:
使用下面这个命令需要你懂的网速,不然下载一些依赖项时,会非常的慢。
# 编译源码(如果要调用cuda,加命令--config=cuda)
bazel build //tensorflow:libtensorflow_cc.so
按理说运行下面这个命令就会在bazel-bin/tensorflow文件夹下生成libtensorflow_cc.so和libtensorflow_framework.so,但是我在运行之后并没有看到libtensorflow_framework.so这个库,只有libtensorflow_framework.so.1,这里我纠结了很久,一直没有找到解决方法,在其他博客上看到的方法不知道是版本问题或者是因为时间问题,在我这里都不起作用,然后我尝试了一下:
bazel build //tensorflow:libtensorflow_framework.so
没想到一下成功了,我也不知道是侥幸还是什么版本更新的问题&#x