相互依赖的静态库
Interdependent Static Libraries
假设
我有两个静态构建的库。 libFoo.a 和 libBar.a.
libFoo.a 使用 libBar.a 中的函数,libBar.a 也恰好使用 libFoo.a 中的函数。
现在,让我们创建一个使用 libFoo 和 libBar 的程序 baz.cpp。通常,您会键入:
g++ baz.cpp -lfoo -lbar
但是,由于这两个静态库相互使用...好吧,对于如何让编译时链接器接受这种情况并将它们链接在一起,我没有明显的解决方案。
按照C++标准,这甚至是明智和允许的事情吗?如果是这样,有没有一种非黑客方法来解决这个问题?
或者首选方法是将libBar和libFoo中的所有目标文件一起编译到一个静态库中?
有两种替代解决方案:
- 重复库名称:
-lfoo -lbar -lfoo
。 - 使用链接器组:
-Wl,--start-group -lfoo -lbar -Wl,--end-group
重复库名称的效果是,链接器将库抛出当前未定义的符号并解析它所能解析的所有内容,因此通过再次提及一个库,它将解析所有先前库中的符号。这始终可用于打破所有循环。
链接器组的效果是它有效地更改了链接器算法:它首先将组中的所有对象文件和库抛到一个 bug 篮中,然后尝试解析所有内容(无论链接器组内的顺序如何(,然后继续下一个组。
相关文章:
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在链接可执行文件之前查找静态库未解析的依赖项
- 在 CMAKE 中使用具有静态依赖项的库
- 在现代 CMake 项目中存档静态依赖项
- CMake 外部和内部静态库的循环依赖关系
- 如何将 SDL2 用作我的静态 (CMake ) 库的 3D 方依赖项?
- 依赖于依赖类型的非静态数据成员的非限定名称
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- 如何使用捆绑依赖项-CMAKE构建静态库
- 具有依赖于实现的成员函数类型的多个静态接口
- 在不同翻译单元中具有静态存储持续时间的依赖非局部常量浮点变量的常量初始化
- cmake-包括静态库中的依赖项
- 这是静态库依赖树中的菱形问题吗?
- 是否可以编译具有在编译时无法解析的外部依赖项的静态库?
- 依赖于其他静态库的静态库
- 为 c++ 构建一个静态库,该库在内部依赖于第三方库
- 相互依赖的静态库
- 完全静态构建具有所有依赖项(libgcc等)的应用程序
- 添加本机静态依赖项
- 如何调试静态依赖项加载问题