如何控制从 Bazel 中的共享库导出哪些符号?

How can I control what symbols are exported from a shared library in Bazel?

我正在学习 Bazel,因为我必须在工作中使用它。我有一个简单的构建规则,它从单个文件创建一个库,我想通过使用链接器版本文件来控制链接器导出的内容。 (我在 Linux)

所以我尝试了:

cc_library (
    name ="thelib",
    srcs = ["lib.cpp"],
    linkopts = ["-Wl,--version-script,lib.ver"]
)

它告诉我“没有这样的文件或目录”。

我尝试了什么:

至此我完全运行没思路了。感谢任何帮助。

首先,共享库通常使用 cc_binary 与其 linkshared 属性一起声明,而不是 cc_library。这是违反直觉的,但反映了 cc_binary 创建可传递 link 而 cc_library 声明中间库的意图。 (更有冒险精神的人可以试试 cc_shared_library

其次,可以通过在 linkopts 中使用版本脚本(和其他 linker 脚本)并在 deps 中将它们声明为依赖项来使用它们。

所以,一起:

cc_binary(
   name = 'mylib.so',
   linkshared = True,
   srcs = ['mylib.cc'],
   linkopts = ['-Wl,-version-script=$(location version-script.lds)'],
   deps = [
      'version-script.lds',
   ]
)