【问题标题】:Can bazel build dll?bazel可以构建dll吗?
【发布时间】:2018-04-05 05:00:38
【问题描述】:

我已经尝试使用 bazel 编译 DLL 好几天了。 我按照示例bazel build 希望生成一个DLL。 我使用的BUILD文件如下:

cc_binary(
    name = "expdtctlib",
    srcs = ["expdtctlib.cpp"],

    deps = [
        "//tensorflow/core:tensorflow",
    ],
    linkshared = 1,
)

cc_binary(
    name = "expdetect",
    srcs = ["expdetect.cpp"],
    data = [":expdtctlib.dll"],
    deps = [
        "//tensorflow/core:tensorflow",
    ],
)

我运行了命令:

bazel build :expdetect

但错误提示“expdtctlib.dll”丢失。 不要bazel先生成“expdtctlib.dll”再编译“expdetect.cpp”?

另外,我尝试用另一种方式构建DLL。BUILD文件如下:

cc_library(
    name = "ExpDetector",
    srcs = ["ExpDetector.cc"],
    hdrs = ["ExpDetector.h"],
    deps = [
        "//tensorflow/core:tensorflow",
    ],
)

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

经过长时间的编译,虽然输出了一个EXE文件并且运行良好,但我只能找到.lib和.exp文件,但找到了.dll文件。

有没有人成功使用 bazel 构建 DLL?我需要你的帮助。

【问题讨论】:

  • Bazel 源代码树中有一个“hello world”DLL 示例:examples/windows/dll
  • @jdehesa 感谢您的帮助。现在事实是,bazel 只输出 .lib 文件和 .exp 文件,但 .dll 文件也很重要。
  • 我不确定您的情况,但我只是运行了 hello world DLL 示例的快速测试构建,它似乎在bazel-out 中正确输出了.exp.dll 文件。
  • 顺便说一句,如果我从我读过的点点滴滴中正确理解(例如here),似乎通常的.lib文件是由Bazel生成的,扩展名为.ifso,它应该代表“接口共享对象”之类的东西(基本上是.lib文件是什么,但作为一个一般概念)。
  • @jdehesa 非常感谢!我已经解决了问题。

标签: c++ tensorflow dll bazel


【解决方案1】:

我修改了两个BUILD文件如下,效果很好!

filegroup(
    name = "srcs",
    srcs = glob(["**"]),
    visibility = ["//examples:__pkg__"],
)


cc_binary(
    name = "expdtctlib.dll",
    srcs = ["expdtctlib.cc",
            "expdtctlib.h"],

    deps = [
        "//tensorflow/core:tensorflow",
    ],
    linkshared = 1,
)

cc_binary(
    name = "expdetect",
    srcs = ["expdetect.cc"],
    data = [":expdtctlib.dll"],
    deps = [
        "//tensorflow/core:tensorflow",
    ],
)

下面的在“//tensorflow”中。

exports_files(
    [
        "LICENSE",
        "ACKNOWLEDGEMENTS",
    ],
)

package(default_visibility = ["//visibility:public"])

filegroup(
    name = "srcs",
    srcs = glob(["**"]) + [
        "//tensorflow/tensorflow/detector0405:srcs",
    ],
)

我不熟悉 bazel 和 c++,但这些修改工作。我会阅读 Bazel Document 以了解更多信息。

【讨论】:

  • cc_library 应该用于目标 expdtctlib.dll
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多