【问题标题】:How to use TensorFlow C++ api as a shared library with bazel?如何使用 TensorFlow C++ api 作为与 bazel 的共享库?
【发布时间】:2021-02-04 13:43:06
【问题描述】:

现在我可以将 TensorFlow C++ api 构建为共享库,参考 make shared libraries with Bazel at Tensorflowlibtensorflow_cc.solibtensorflow_framework.so 文件可以位于 bazel-bin/tensorflow

我对bazel不熟悉,我应该如何使用那些带有bazel的TF共享库来编写C++代码,你能提供一个类似links的例子吗?

【问题讨论】:

    标签: c++ tensorflow bazel


    【解决方案1】:

    Bazel 只是一个类似于 make 或 cmake 的工具。要使用 bazel 编译代码,您必须创建一个构建文件 BUILD。假设您的代码位于,例如,tensorflow/tensorflow/test/code.cpp:

    #include "tensorflow/core/public/session.h"
    #include "tensorflow/core/platform/env.h"
    
    using namespace tensorflow;
    
    ...
    

    创建一个包含如下内容的BUILD 文件(在同一文件夹中):

    cc_binary(
        name = "code",
        srcs = ["code.cc"],
        deps = [
            "//tensorflow/core:tensorflow",
        ]
    )
    

    然后使用命令配置和编译您的代码:

    cd tensorflow
    ./configure
    cd tensorflow/tensorflow/test
    bazel build :code
    

    一个可执行文件将在 tensorflow 根目录的 bazel-bin 文件夹中可用。


    但是,编译后的代码可能很大(> 100 MB),因此最好将您的代码链接到 TensorFlow 的共享库。 libtensorflow_cc.solibtensorflow_framework.so 都可以像其他共享库文件 (.so) 一样在您的代码中使用。以下是这样做的常用方法。

    1. 使用共享库(libtensorflow_cc.so 或/和libtensorflow_framework.so)使用头库文件(.h)编译 C++ 代码,例如,
      g++ -fPIG -Wall -o code code.cpp -L/usr/lib/libtensorflow_cc.so -ltensorflow_cc
      
    2. LD_LIBRARY_PATH 设置为.so 文件的位置
    3. 使用ldd your_code.out 确认您的可执行文件是否正确链接到共享库。
    4. 运行可执行文件(例如./your_code.out

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多