C++ 玩Bazel C++;教程;生成不创建/使用共享库?
今天第一次看Bazel 在构建时,我可以看到它如何构建简单的可执行文件和归档库,但它看起来不像示例中创建或使用共享库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本身对其
有人知道演示此过程的简单示例构建文件吗?谢谢。共享库是一个
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"],
)