欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tensorflow 在c++上的编译和遇到的一些问题

程序员文章站 2023-12-27 09:05:39
...

本人部署的配置为tensorflow1.15  cuda10.1  cudnn7.6.5  bazel 0.24.1

依赖环境:

1、bazel 安装

国内下载地址:https://www.newbe.pro/Mirrors/Mirrors-Bazel/

chmod +x bazel****.sh
./bazel****.sh --user

gedit ~/.bashrc   打开.bashrc

再将  "export PATH="$PATH:$HOME/bin" 加入 最后一行

再“source ~/.bashrc”**路径

注意:安装路径中包含中文可能汇报错

关于bazel版本,在编译时会提示所需版本,在这我使用的是0.24.1

bazel卸载:

rm -rf ~/.bazel
rm -rf ~/bin
rm -rf /usr/bin/bazel

再将  "export PATH="$PATH:$HOME/bin" 删除

 

下载tensorflow源码

git clone --recursive https://github.com/tensorflow/tensorflow

将源码克隆下来

然后切换分支

进行配置

cd tensorflow   # 进入tensorflow文件夹

git checkout r1.15  #切换到r1.15分支

./configure #配置

除了cuda 是y 其他都是n 

Tensorflow 在c++上的编译和遇到的一些问题

注意:如果你的bazel版本不匹配这里会报错,也可以打开configure.py文件中查看所需bazel文件版本;

还有一报错可能“读取不到你的cuda版本,让你手动输入”这里可能是你的编译的tensorflow版本太低或者你装的cuda版本太高,更换版本即可。

Tensorflow 在c++上的编译和遇到的一些问题

开始编译

#有显卡
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so
#没显卡
bazel build --config=opt //tensorflow:libtensorflow_cc.so
#有显卡
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_framework.so 
#没显卡
bazel build --config=opt //tensorflow:libtensorflow_framework.so 

编译完会出现bazel-bin  bazel-genfiles bazel-out bazel-tensorflow bazel-testlogs 文件夹(若在master分支编译则没有bazel-genfiles文件夹)

下载依赖库

到tensorflow/contrib/makefile下,执行“./build_all_linux.sh”若成功则会出现gen文件夹,downloads文件夹下会出现很多文件夹

报错如下:

Tensorflow 在c++上的编译和遇到的一些问题

原因:其中eigen下载网址https://bitbucket.org/eigen/eigen/get/49177915a14a.tar.gz 有误

解决方案:

将tensorflow下的workspace.bzl文件中,找到eigen

Tensorflow 在c++上的编译和遇到的一些问题

urls中复制eigen的下载路径"https://storage.googleapis.com/mirror.tensorflow.org/bitbucket.org/eigen/eigen/get/49177915a14a.tar.gz"

替换掉tensorflow/contrib/makefile下download_dependencies.sh中EIGEN_URL

Tensorflow 在c++上的编译和遇到的一些问题

再执行./build_all_linux.sh 就可以了(此过程保持*状态)

期间还可能报错一大堆“-std=c++11”,替换gcc版本4.8即可,建议从头到尾都用gcc4.8

新建工程进行测试

目录结构

  • src:源代码目录,如下main.cpp
  • build:构建项目文件区,编译后产生相关构建文件。无需添加文件
  • CMakeLists.txt

main.cpp

#include <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>

#include <iostream>

using namespace std;
using namespace tensorflow;

int main()
{
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }
    cout << "Session successfully created.\n";
}

CMakeLists.txt

cmake_minimum_required (VERSION 2.8.8)
project (example)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")

aux_source_directory(./src DIR_SRCS)
link_directories(/home/les/bazelzz/tensorflow/bazel-bin/tensorflow)
include_directories(
#./include
 #如果没有拷贝相关头文件到include目录,需要添加以下包含目录
 #  path_to_tensorflow/tensorflow
 #  path_to_tensorflow/tensorflow/bazel-genfiles
 #  path_to_tensorflow/tensorflow/contrib/makefile/gen/protobuf/include
/home/les/bazelzz/tensorflow
/home/les/bazelzz/tensorflow/bazel-genfiles
/home/les/bazelzz/tensorflow/tensorflow/contrib/makefile/gen/protobuf/include
/home/les/bazelzz/tensorflow/tensorflow/contrib/makefile/downloads/absl
/usr/include/eigen3
  )
add_executable(example  ${DIR_SRCS}) 
target_link_libraries(example tensorflow_cc tensorflow_framework)

在build下执行

cmake ..

make

./example

完成

Tensorflow 在c++上的编译和遇到的一些问题

 

上一篇:

下一篇: