用 bazel 来编译 C++工程会生成很多小的动态库,怎么把这些动态库都 merge 成一个大的动态库?

2022-12-05 01:24:44 +08:00
 gouchaoer
公司用的百度 apollo 的 cyber 作为通信中间件,但是这个 cyber 用 bazel 编译出来又巨多的.so 动态库。如果我基于 cyber 编译了一个程序,那么一旦 cyber 内部有了一点和接口无关的修改,那我这个程序就必须重新编译了,特别麻烦。我上一家用 CMakeLists.txt 编译成了一个大的.so ,这样就特别方便。请问 bazel 有没有方便的办法把所有动态库 merge 成一个大的动态库么?
993 次点击
所在节点    问与答
3 条回复
ginakira
2023-01-21 23:43:55 +08:00
应该没有什么简便的方法…非常麻烦,我们目前只能写一个巨长的 srcs 放在一个 cc_library 里来达到合并动态库的效果……
crystalyouth
2023-02-03 16:16:00 +08:00
高版本的 bazel (>= 5.0) 应该可以用 cc_shared_library ,具体可以参考一下 tensorflow 。

低版本的可以用 cc_binary 来做,参考 https://www.appsloveworld.com/cplus/100/250/playing-with-bazel-c-tutorials-build-does-not-create-use-shared-libraries 这里的第二个回答。
tarsss
2023-09-06 18:40:55 +08:00
可以用 cc_binary 编译.so ,然后依赖的库需要添加 alwayslink="1",之后依赖的库会自动拷贝到.so

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/900082

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX