V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gouchaoer
V2EX  ›  问与答

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

  •  
  •   gouchaoer · Dec 5, 2022 · 1941 views
    This topic created in 1243 days ago, the information mentioned may be changed or developed.
    公司用的百度 apollo 的 cyber 作为通信中间件,但是这个 cyber 用 bazel 编译出来又巨多的.so 动态库。如果我基于 cyber 编译了一个程序,那么一旦 cyber 内部有了一点和接口无关的修改,那我这个程序就必须重新编译了,特别麻烦。我上一家用 CMakeLists.txt 编译成了一个大的.so ,这样就特别方便。请问 bazel 有没有方便的办法把所有动态库 merge 成一个大的动态库么?
    3 replies    2023-09-06 18:40:55 +08:00
    ginakira
        1
    ginakira  
       Jan 21, 2023
    应该没有什么简便的方法…非常麻烦,我们目前只能写一个巨长的 srcs 放在一个 cc_library 里来达到合并动态库的效果……
    crystalyouth
        2
    crystalyouth  
       Feb 3, 2023
    高版本的 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  
       Sep 6, 2023
    可以用 cc_binary 编译.so ,然后依赖的库需要添加 alwayslink="1",之后依赖的库会自动拷贝到.so
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2590 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:46 · PVG 20:46 · LAX 05:46 · JFK 08:46
    ♥ Do have faith in what you're doing.