如何解决Bazel 共享库不包括所有符号
我正在尝试使用 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
解决方法
Unix 链接器传统上会删除顶级目标不需要的符号(即 "library.so"
cc_binary
中的代码)。如果设置了 cc_library
,Bazel 将要求链接器在最终顶级链接中强制包含 alwayslink = True
规则中的所有代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。