V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gouchaoer
V2EX  ›  问与答

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

  •  
  •   gouchaoer · 2022-12-05 01:24:44 +08:00 · 945 次点击
    这是一个创建于 721 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司用的百度 apollo 的 cyber 作为通信中间件,但是这个 cyber 用 bazel 编译出来又巨多的.so 动态库。如果我基于 cyber 编译了一个程序,那么一旦 cyber 内部有了一点和接口无关的修改,那我这个程序就必须重新编译了,特别麻烦。我上一家用 CMakeLists.txt 编译成了一个大的.so ,这样就特别方便。请问 bazel 有没有方便的办法把所有动态库 merge 成一个大的动态库么?
    3 条回复    2023-09-06 18:40:55 +08:00
    ginakira
        1
    ginakira  
       2023-01-21 23:43:55 +08:00
    应该没有什么简便的方法…非常麻烦,我们目前只能写一个巨长的 srcs 放在一个 cc_library 里来达到合并动态库的效果……
    crystalyouth
        2
    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
        3
    tarsss  
       2023-09-06 18:40:55 +08:00
    可以用 cc_binary 编译.so ,然后依赖的库需要添加 alwayslink="1",之后依赖的库会自动拷贝到.so
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   978 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.