C++ 玩Bazel C++;教程;生成不创建/使用共享库?

C++ 玩Bazel C++;教程;生成不创建/使用共享库?,c++,build,bazel,C++,Build,Bazel,今天第一次看Bazel 在构建时,我可以看到它如何构建简单的可执行文件和归档库,但它看起来不像示例中创建或使用共享库 有人知道演示此过程的简单示例构建文件吗?谢谢。共享库是一个cc\u二进制文件: cc_binary( name = "libfoo.so", srcs = ["foo.cc"], linkshared = 1, ## important ) (在非常重要的情况下,您可能还应该添加linkstatic=1,以获得一个自包含的DSO,该DSO本身对其

今天第一次看Bazel

在构建时,我可以看到它如何构建简单的可执行文件和归档库,但它看起来不像示例中创建或使用共享库


有人知道演示此过程的简单示例构建文件吗?谢谢。

共享库是一个
cc\u二进制文件

cc_binary(
    name = "libfoo.so",
    srcs = ["foo.cc"],
    linkshared = 1,     ## important
)

(在非常重要的情况下,您可能还应该添加
linkstatic=1
,以获得一个自包含的DSO,该DSO本身对其源依赖项没有加载时间依赖项。)

为了执行动态链接,您必须首先导入共享库。您应该指定库头、库二进制文件和接口库(仅Windows需要,本例中不提供):


前缀和后缀(
lib
.so
)不是应该自动添加的吗?@VTT:不,我不这么认为。谢谢。将共享库归类为
cc\u二进制文件
,而将归档库归类为
cc\u库
,其基本原理是什么?这引出了我问题的后半部分:当我尝试将可执行文件与此链接时,我得到了一个分析阶段错误:
error:/home/dcf/workdir/bazel/examples/cpp tutorial/stage3/main/BUILD:10:12:cc_二进制规则的deps属性//main:hello-world:cc_二进制规则'//lib:libhello.so'放错了位置(预期的是cc_库、objc_库、cc_原型库或cc_导入)
如何链接类型为
cc_binary
的对象?您永远不会在bazel中手动“构建动态库”。只需使用
cc\u库
s和
deps
。您只需要构建一个DSO(如我的回答中所述),以便将其与(比如)dlopen一起使用。看起来你基本上是以错误的方式思考你的构建。无论是
cc\u库
发出任何DSO还是仅仅是静态存档,都只是构建过程的一个细节(例如,使用
--动态\u模式
控制)。此解决方案提供了我所需要的。但是有一个条件:如果你
bazel-build-imported_-libfoo
它是一个nop。只有当您
bazel构建栏
时,它才会正确触发
libfoo.so的构建。尝试使用bazel版本2.1.1和3.1.0。这对于我理解如何在更简单的组件中编写tf_内核_库来说是一个非常有用的答案。谢谢
# Build the shared library
cc_binary(
    name = "libfoo.so",
    srcs = ["foo.cc"],
    linkshared = 1,     ## important
)

# Import the shared library
cc_import(
    name = "imported_libfoo",
    hdrs = ["foo.h"],
    shared_library = "libfoo.so",
)

# Link to the shared library
cc_binary(
    name = "bar",
    deps = [":imported_libfoo"],
)