记录tensorflow c++接口编译

本文详细介绍了如何在 Linux 系统上安装配置 TensorFlow 1.9 版本,包括 CUDA、cuDNN、Bazel、protobuf 等依赖项的安装过程。同时,提供了 C++ 开发环境下 TensorFlow 的编译和链接方法,以及 OpenCV 和 dlib 的集成步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tensorflow版本:r1.9
cuda: 9.0
cudnn: 7.3.0
bazel: 0.15
protobuf: 3.5.0 (版本要与tf对应)
eigen:使用tensorflow脚本生成。
nccl: 2.4.8

步骤:(基本参考:https://blog.youkuaiyun.com/qq_37541097/article/details/86232687)

  1. 安装protobuf
sudo apt-get install automake libtool
./autogen.sh#如果报错要apt-get install autoconf
./configure
make
sudo make install
sudo ldconfig
# sudo make uninstall 安装错版本后卸载指令
protoc --version  # 3.5.0

刚开始装在用户目录下,在编译tf项目时报报protoc版本不兼容error This file was generated by a newer version of protoc which is,原来/usr/bin/protoc要与/usr/include相对应。这样用户目录下protoc错误匹配了/usr/include头文件。
2. bazel

chmod +x bazel-0.15.2-installer-linux-x86_64.sh
./bazel-0.15.2-installer-linux-x86_64.sh --user
#bashrc中export PATH="$PATH:/home/liuch/bin"
  1. nccl (在我资源里有)
    下载nccl-2.4.8-1-x86_64.pkg.tar.xz。解压后将nccl-xxx所有文件夹及其下属文件拷到cuda-9.0/lib64目录下,也可以是其他目录,主要在tensorflow configure中指定nccl路径。

  2. tensorflow

git clone --recursive https://github.com/tensorflow/tensorflow
cd ./tensorflow
git checkout r1.9
./configure 
#python, lib都是用anaconda的,其他都选择N,然后cuda选Y,指定cuda,cudnn版本。

bazel build --config=opt --config=monolithic --config=cuda //tensorflow:libtensorflow_cc.so
  1. 安装eigen
    在tensorflow/tensorflow/contrib/makefile/download_dependencies.sh
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/liuch/eigen3#能用户目录就用户目录
make
make install
  1. 编写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";
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(cpptensorflow)
set(CMAKE_CXX_STANDARD 11)
link_directories(/home/liuch/C/tensorflow/bazel-bin/tensorflow)
include_directories(
        /home/liuch/C/tensorflow
        /home/liuch/C/tensorflow/bazel-genfiles
        /home/liuch/C/tensorflow/bazel-bin/tensorflow
        /home/liuch/eigen3/include/eigen3
)
add_executable(cpptensorflow main.cpp)
target_link_libraries(cpptensorflow tensorflow_cc tensorflow_framework)

cmake make运行完成。


  • opencv安装
    如果在qt工程中使用接口,最好把编译文件整理一下,否则运行的时候得拷贝so文件。
  1. 拿出编译好的so文件
mkdir /home/liuch/tensorflow/lib
cp bazel-bin/tensorflow/libtensorflow_cc.so /home/liuch/tensorflow/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so /home/liuch/tensorflow/lib
  1. 拷贝源代码
mkdir /home/liuch/tensorflow/google/tensorflow
cp -r tensorflow /home/liuch/tensorflow/google/tensorflow/

cp bazel-genfiles/tensorflow/core/framework/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/core/framework
cp bazel-genfiles/tensorflow/core/lib/core/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/core/lib/core
cp bazel-genfiles/tensorflow/core/protobuf/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/core/protobuf
cp bazel-genfiles/tensorflow/core/util/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/core/util
cp bazel-genfiles/tensorflow/cc/ops/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/cc/ops

cp bazel-genfiles/tensorflow/core/kernels/*.h  /home/liuch/tensorflow/google/tensorflow/tensorflow/core/kernels
cp -r third_party /home/liuch/tensorflow/google/tensorflow/
rm -r /home/liuch/tensorflow/google/tensorflow/third_party/py
rm -r /home/liuch/tensorflow/google/tensorflow/third_party/avro
  1. qt
    因为我只能在用户目录下安装qt,但是根目录可能被别人装过其他版本qt了,我这里装动态库始终没成功,所以装的静态版qt4.8.可自行百度qt4.8静态编译。
    在cmake编译opencv前,CMakeLists.txt加上set(CMAKE_CXX_STANDARD 11),否则cv不支持c++11.

pro

INCLUDEPATH += /home/liuch/opencv/include \
/home/liuch/opencv/include/opencv \
/home/liuch/opencv/include/opencv2 \
/home/liuch/tensorflow/google/tensorflow \
/home/liuch/eigen3/include/eigen3

LIBS += /home/liuch/tensorflow/lib/libtensorflow_cc.so \
/home/liuch/tensorflow/lib/libtensorflow_framework.so \
/home/liuch/opencv/lib/libopencv_calib3d.so \
/home/liuch/opencv/lib/libopencv_shape.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_calib3d.so.3.4 \
/home/liuch/opencv/lib/libopencv_stitching.so \
/home/liuch/opencv/lib/libopencv_calib3d.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_stitching.so.3.4 \
/home/liuch/opencv/lib/libopencv_core.so \
/home/liuch/opencv/lib/libopencv_stitching.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_core.so.3.4 \
/home/liuch/opencv/lib/libopencv_superres.so \
/home/liuch/opencv/lib/libopencv_core.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_superres.so.3.4 \
/home/liuch/opencv/lib/libopencv_dnn.so \
/home/liuch/opencv/lib/libopencv_superres.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_dnn.so.3.4 \
/home/liuch/opencv/lib/libopencv_videoio.so \
/home/liuch/opencv/lib/libopencv_dnn.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_videoio.so.3.4 \
/home/liuch/opencv/lib/libopencv_features2d.so \
/home/liuch/opencv/lib/libopencv_videoio.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_features2d.so.3.4 \
/home/liuch/opencv/lib/libopencv_video.so \
/home/liuch/opencv/lib/libopencv_features2d.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_video.so.3.4 \
/home/liuch/opencv/lib/libopencv_flann.so \
/home/liuch/opencv/lib/libopencv_video.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_flann.so.3.4 \
/home/liuch/opencv/lib/libopencv_videostab.so \
/home/liuch/opencv/lib/libopencv_flann.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_videostab.so.3.4 \
/home/liuch/opencv/lib/libopencv_highgui.so \
/home/liuch/opencv/lib/libopencv_videostab.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_highgui.so.3.4 \
/home/liuch/opencv/lib/libopencv_highgui.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_imgcodecs.so \
/home/liuch/opencv/lib/libopencv_imgcodecs.so.3.4 \
/home/liuch/opencv/lib/libopencv_imgcodecs.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_imgproc.so \
/home/liuch/opencv/lib/libopencv_imgproc.so.3.4 \
/home/liuch/opencv/lib/libopencv_imgproc.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_ml.so \
/home/liuch/opencv/lib/libopencv_ml.so.3.4 \
/home/liuch/opencv/lib/libopencv_ml.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_objdetect.so \
/home/liuch/opencv/lib/libopencv_objdetect.so.3.4 \
/home/liuch/opencv/lib/libopencv_objdetect.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_photo.so \
/home/liuch/opencv/lib/libopencv_photo.so.3.4 \
/home/liuch/opencv/lib/libopencv_photo.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_shape.so \
/home/liuch/opencv/lib/libopencv_shape.so.3.4

CONFIG += c++11
CONFIG += static

  • dlib安装
  1. openblas
git clone https://github.com/xianyi/OpenBLAS.git
 cd OpenBLAS
 make -j8
make PREFIX=/home/liuchl/OpenBLAS install

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/liuchl/lib/
  1. dlib
git clone https://github.com/davisking/dlib.git
cd dlib
>>首先进入dlib的根目录下
>>再执行如下语句:
cd examples  #进入dlib下的examples文件夹
mkdir build  #新建build文件夹,存放cmake编译后的执行文件
cd build     #进入新建好的build文件夹
cmake ..     #cmake编译examples整个文件夹
cmake --build . --config Release  
>>进入dlib根目录下
mkdir build
cd build
cmake ..
make release=1 
#mkdir build; cd build; cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1; cmake --build .

-DDLIB_USE_CUDA=0不使用cuda
-DUSE_AVX_INSTRUCTIONS=1使用cpu的AVX加速

pro

SOURCES += /home/liuch/dlib-19.17/dlib/all/source.cpp
LIBS += -L/home/liuch/dlib-19.17/dlib
INCLUDEPATH += /home/liuch/dlib-19.17
QMAKE_CXXFLAGS += -std=c++0x -DDLIB_PNG_SUPPORT -DDLIB_JPEG_SUPPORT
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值