Mac系统中是否支持创建两个相互依赖的共享库?
结论
你的理解存在偏差,macOS 完全支持创建相互依赖的 .dylib 动态库,不存在无法破解的死循环,不需要重组项目结构。
原理说明
macOS 下的 .dylib 构建时确实会记录依赖库的安装路径(install name),但这一环节仅要求你指定的依赖路径格式合法,不会强制要求依赖的库文件在当前构建阶段已经存在,这是你认知误区的核心。
具体操作步骤
你可以通过分阶段构建的方式轻松实现双向依赖:
- 先分别编译两个库的源码为独立目标文件,不执行链接操作:
编译lib1源码得到lib1.o,编译lib2源码得到lib2.o,这一步完全不涉及库依赖,不会出现任何问题。 - 先构建任意一个动态库,比如先构建
lib1.dylib,链接参数里直接声明依赖lib2.dylib即可,哪怕此时lib2.dylib还未生成,链接器也不会报错。 - 再用预编译好的
lib2.o构建lib2.dylib,链接参数里声明依赖已经生成的lib1.dylib,完成构建。
验证方法
构建完成后可以执行 otool -L <库文件名> 命令查看两个动态库的依赖列表,就能看到互相引用的关系。运行时只要两个库都在动态库的搜索路径范围内,就能正常加载使用。
内容的提问来源于stack exchange,提问作者somebody4
相关产品推荐
相关产品推荐

