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 的问题页面上有一个更明确的问题。
Unix linkers 传统上会删除顶级目标不需要的符号(即 "library.so"
cc_binary
中的代码)。 Bazel 将要求 linker 在最终顶级 link 中强制包含 cc_library
规则中的所有代码,如果 alwayslink = True
已设置。
我正在尝试使用 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 的问题页面上有一个更明确的问题。
Unix linkers 传统上会删除顶级目标不需要的符号(即 "library.so"
cc_binary
中的代码)。 Bazel 将要求 linker 在最终顶级 link 中强制包含 cc_library
规则中的所有代码,如果 alwayslink = True
已设置。