Bazel 共享库不包含所有符号

Bazel shared library does not include all symbols

我正在尝试使用 bazel (mediapipe) 构建共享库并在没有源代码的情况下链接依赖项,或者 headers 未能包含依赖项符号。

这是伪代码示例

cc_binary(
    name = "library.so",
    deps = ["//project:dependency"],
    linkshared = 1,
)

一些其他文件:

cc_library(
   name = "dependency",
   srcs = ["file.cc"],
   hdrs = ["file.h"]
)

在file.h

class MyClass {
public:
   int abc = 0;
};

然后当我用 Android 构建时,让我们说

bazel build -c opt --config=android_arm project:framework.so --linkopt="-s"

在我构建之后,共享库不包含来自 file.h (MyClass) 使用

的任何符号
nm -D output/framework.so | grep MyClass

有办法吗?我也是bazel的新手。

mediapipe 的问题页面上有一个更明确的问题。

https://github.com/google/mediapipe/issues/2032

Unix linkers 传统上会删除顶级目标不需要的符号(即 "library.so" cc_binary 中的代码)。 Bazel 将要求 linker 在最终顶级 link 中强制包含 cc_library 规则中的所有代码,如果 alwayslink = True 已设置。