我有一堆非常复杂的库和可执行文件(Linux)。整个系统过去是使用静态库开发的,然后几年前这些库被迁移为共享库(-fPIC 等)。检查我发现的依赖项,有两个共享库:libA 和 libB:
- libA 从 libB 调用一些函数
- libB 从 libA 调用一些函数
我想构建具有适当依赖关系的库:libA 依赖于 libB,而 libB 依赖于 libA。但我不能给链接器“-llibB”,因为在 libA 的构建时 lib 还不存在
如果我在不依赖 libB(创建未解析的符号)的情况下构建 libA,我必须记住,如果我使用 libA,我还必须链接 libB,因为 libA 中的符号未定义。这很烦人!
我正在寻找的是一种构建 libA 并告诉链接器创建对 libB 的依赖关系而此时没有 libB 的可能性,这可能吗?
如果不将 libA 和 libB 合并在一起,如何解决我的问题?
问候,彼得斯
编辑: 我发现,我可以直接生成一个空库(无需编写源代码):
gcc -shared -Wl,-soname,libB.so.$(MAJOR) -o libB.so
然后我可以构建 libA 添加: -lB到构建命令。之后我删除了 libB.so。最后,安装后 libB 指的是 libA,而 libA 指的是 libB。
当然 MAJOR 编号必须与 libB 的 MAJOR 匹配,这是因为主编号对于所有库都是通用的。
我只是问自己是否有更合适的方法来做到这一点?