Bazel可以建造DLL

Can bazel build dll?

本文关键字:DLL Bazel      更新时间:2023-10-16

我尝试使用Bazel编译DLL数天。我遵循了Bazel Build的示例,希望生成DLL。我使用的构建文件如下:

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。构建文件如下:

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?我需要您的帮助。

我修改了两个构建文件,效果很好!

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文档以了解更多信息。