Bazel 使用 soname 创建 C++ 共享库

Chr*_*aes 7 c++ shared-libraries bazel

我想使用soname与 Bazel创建一个共享的C++ 库。

随着cmake我可以设置属性,如:

set_target_properties(my-library
        PROPERTIES
                SOVERSION 3
                VERSION 3.2.0
        )
Run Code Online (Sandbox Code Playgroud)

然后会产生

libmy-library.so -> libmy-library.so.3
libmy-library.so.3 -> libmy-library.so.3.2.0
libmy-library.so.3.2.0
Run Code Online (Sandbox Code Playgroud)

但是,在bazel文档中,我找不到任何可以让我轻松做到这一点的内容。我知道我可以直接定义 soname 和 version 并linkopts在构建文件中传递一些:

cc_binary(
    name = "libmy-library.so.3.2.0",
    srcs = ["my-library.cpp", "my-library.h"],
    linkshared = 1,
    linkopts = ["-Wl,-soname,libmy-library.so.3"],
)
Run Code Online (Sandbox Code Playgroud)

它确实生成了具有正确 soname 的libmy-library.so.3.2.0,但不是 .so 文件,因此它需要大量的黑客攻击:

  • 创建 libmy-library.so.3 符号链接
  • 创建 libmy-library.so 符号链接
  • 创建一些导入规则,以便我可以构建与此库链接的二进制文件。

感觉这不是正确的方法。解决此类问题的正确方法是什么?