这篇文章上次修改于 903 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
如果希望通过 .so 和头文件的方式使用 b,但是 b 又依赖 a,如何让 b 的 .so 中包含 a 呢。那就是将 b 编译为 .so 时,BUILD 文件如下书写:
cc_binary(
name = "b",
srcs = ["b.cc", "b.h"],
deps = ["//example/a:a"],
linkshared=True,
)
以上 BUILD 中有两个关键点:
- cc_binary 而不是 cc_library,因为如果编译为 cc_library,将不会包含 a。
- linkshared=True
编译好的 .so 见 bazel-bin 文件夹。
要想成功使用 b.h 和 b.so,还要注意,b.h 中不要有 c++ 库以外的头文件,将这些头文件放到 b.cc 中,然后将相关的数据类型在 b.h 中前置声明。
另外还需要查看 .so 中包含哪些库文件:
ldd xxx.so
并将依赖的库文件复制到统一的地方。
没有评论