Ubuntu18.04编译TensorFlow C++ API以及遇到的问题
参考:
Linux环境下编译TensorFlow C++ API和测试方法总结(完美版)_Asia-Lee的博客
关于bazel构建文件出现的release-62-1.tar.gz错误解决_bazel 6.2.1 有问题_芝麻开蒙的博客
https://blog.csdn.net/zqwwwm/article/details/121924210
https://blog.csdn.net/shellmoon/article/details/113747481
需安装软件库和对应版本
tensorflow-1.13.1链接:TensorFlow 1.13.1
bazel-0.19.2-installer-linux-x86_64.sh链接:bazel 0.19.2
Anaconda3-4.3.1-Linux-x86_64.sh链接:Anaconda3 4.3.1
protobuf-all-3.6.1.tar.gz链接:protobuf 3.6.1
环境配置
1.安装Anaconda3
./Anaconda3-4.3.1-Linux-x86_64.sh
在添加环境变量的时候选yes
2.安装bazel
sudo apt-get install unzip make g++ gcc cmake
sudo apt-get install autoconf automake libtool curl zlib1g-dev liblzma-dev
./bazel-0.19.2-installer-linux-x86_64.sh --user
把export PATH="$PATH:$HOME/bin"添加到~/.bashrc中
source ~/.bashrc
3.安装protobuf
tar -zxvf protobuf-all-3.6.1.tar.gz
cd protobuf-all-3.6.1
./configure
sudo make
sudo make install
sudo vim /etc/profile
在最后一行添加export LD_LIBRARY_PATH=/usr/local/lib
source /etc/profile
验证:protoc --version
4.配置TensorFlow
cd tensorflow-1.13.1
./configure
5.使用bazel进行编译生成动态库
问题1
如果不能科学上网的话,需要自己建一个本地的http服务,然后下载release-62-1.tar.gz,不然会一直报错。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dowaJGP9-1689389908385)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\1689248723078.png)]
解决步骤:
a 搭建本地http服务
sudo apt-get install apache2
sudo apt-get install apache2-dev
验证:sudo systemctl status apache2
到浏览器输入localhost看是否显示apache2的页面
b 把release-62.1.tar.gz放到本地http服务器
1.下载icu-release-62-1.tar.gz并重命名为release-62-1.tar.gzhttps://codeload.github.com/unicode-org/icu/tar.gz/release-62-1
2.sudo mv release-62-1.tar.gz /var/www/html/
3.把http://localhost/release-62-1.tar.gz添加到tensorflow-1.13.1/third_party/icu/workspace.bzl的urls
4.把86b85fbf1b251d7a658de86ce5a0c8f34151027cc60b01e1b76f167379acf181替换掉tensorflow/third_party/icu/workspace.bzl的sha256后面的数字
(1)使用cuda(gpu版)
export LD_LIBRARY_PATH=/usr/local/lib
(2)不使用cuda(cpu版)
bazel build --config=opt //tensorflow:libtensorflow_cc.so
6.成功编译
这里不知道是因为网络问题还是g++版本的问题,反复编译了很多次才成功。
运行样例
这里的样例我参考的别人的博客
指路:https://blog.csdn.net/zqwwwm/article/details/121924210
安装其他依赖库
报错1
fatal error: absl/strings/string_view.h: No such file or directory
#include “absl/strings/string_view.h”
下载abseil,然后把目录下的absl文件夹拷贝到/usr/local/include中 下载链接:https://github.com/abseil/abseil-cpp
sudo cp -r ./absl /usr/local/include
报错2
没有安装eigen3时会运行样例会报错:fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
#include “unsupported/Eigen/CXX11/Tensor”
这里我没有在Linux上成功使用科学上网,所以依赖库一直下载不下来,就先只安了一个eigen3.
这里安装的是eigen3.3.7版本 链接:https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.tar.gz
cd eigen-3.3.7
mkdir build
cd build
sudo cmake ..
sudo make install
sudo cp -r /usr/local/include/eigen3/Eigen /usr/include
sudo cp -r /usr/local/include/eigen3/signature_of_eigen3_matrix_library /usr/include
sudo cp -r /usr/local/include/eigen3/unsupported /usr/include