我写了一个包含几个不兼容版本的共享库。我更改了 SONAME,因此它们被称为:
- lib_mylib.so.1.0.0(旧库)
- lib_mylib.so.2.0.0
有一些函数只在 mylib.so.1 中,其他只在 mylib.so.2 中,许多函数很常见(但有几个改变了参数数量)
而且我担心可以将 mylib 的两个版本链接到单个应用程序中,例如当应用程序本身很大并且包含许多库时。当应用程序部分重建时,可能会出现这样的情况:
- 应用
- app_lib1.so(使用 mylib.so.1 构建 - 我的 lib 的第一个版本)
- app_lib2.so(用 mylib.so.2 重建 - 第二个版本)
我已经看到加载了两个版本的应用程序(都ldd
报告了)。
那么,是否可以在 mylib.so.2 中添加一些检查代码来检测是否已经加载了两个版本的库并且它们具有冲突的 ABI/接口。(我不能修改 lib_mylib.so.1 来添加一些东西)