0

我正在尝试使用 bazel (mediapipe) 构建一个共享库,并且链接没有源或标头的依赖项无法包含依赖项符号。

这是排序伪代码示例

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

其他一些文件:

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

在文件.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

4

1 回答 1

3

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

于 2021-05-15T03:12:40.917 回答