【发布时间】:2021-02-13 02:09:21
【问题描述】:
有没有创建两个相互依赖的库 liba.so 和 libb.so 的好方法?除非两个库都已存在,否则以下内容将不起作用:
g++ -fPIC -L. -shared -lb a.cpp -o liba.so
g++ -fPIC -L. -shared -la b.cpp -o libb.so
我可以创建没有依赖关系的 liba.so,然后根据 liba.so 创建 libb.so,然后重新链接 liba.so 或使用 patchelf 修复它。有没有更好的办法?
或者所有库都没有依赖关系会更好吗?只是确保主应用程序链接所有递归需要的东西?
背景:这是一个捆绑的应用程序,用户只会使用主应用程序,而不是库本身。我们目前正在使用静态库,但正在研究共享库,以避免增量构建的链接时间过长,并减少多个应用程序的总大小,这些应用程序都使用一组通用的库函数。
【问题讨论】:
-
如果您的库相互依赖,那么它们应该是一个库。如果您总是必须同时加载两个,则没有理由拥有两个。
-
问题是,如果它们是一个库,它可能会是 10GB,我们不想为每个增量构建重新链接。此外,我们有许多产品,每个产品都使用库的一个子集。尽管存在循环依赖,但并非所有 100 个库都依赖于所有其他库。
标签: linux linker shared-libraries