能否将所有依赖编译到自研库中,免除下游应用开发者处理相关依赖的工作
自研库依赖打包方案解答
你所需要的将所有依赖打包到单个库文件、下游无需额外配置依赖的需求完全可以实现,根据你选择输出的库类型不同,有两种成熟的落地方案:
方案1:输出独立静态库
如果你选择输出静态链接库,可直接将所有依赖合并到最终静态库文件中:
- 操作逻辑:提前将my lib依赖的所有第三方库编译为静态版本(Windows下为
.lib),在my lib的构建脚本中配置将所有依赖静态库的.obj目标文件直接合并到你输出的最终静态库中。同时仅对外暴露my lib的业务接口头文件,所有内部依赖的头文件无需对外提供。 - 下游使用成本:target application的开发者仅需引入你提供的1个最终静态
.lib文件 + 若干个对外接口头文件即可,完全不需要处理my lib的内部依赖配置,也不需要额外添加其他lib、dll或头文件。
方案2:输出独立DLL动态库
如果你选择输出DLL动态库,同样可以实现单文件交付:
- 操作逻辑:编译DLL时配置将所有依赖的静态库全部静态链接到DLL内部,同时在符号导出配置中仅暴露my lib的对外业务接口,隐藏所有内部依赖的符号,避免符号冲突。
- 下游使用成本:target application的开发者仅需引入你提供的1个
.dll文件 + 1个对应的导入.lib文件 + 若干个对外接口头文件即可,运行时仅需将DLL放到可执行文件同级目录就能正常运行,无需额外配置任何内部依赖。
注意事项
- 如果你的依赖项本身仅提供动态库版本,需要先获取对应依赖的源代码编译为静态版本,无法直接将第三方DLL打包到你的静态库或DLL中。
- 注意核查所有依赖项的许可证条款,确认将依赖打包到你的库中并对外分发的行为符合许可证要求。
- 构建时建议开启内部符号隐藏配置,避免my lib的内部依赖符号和下游应用的其他依赖出现符号冲突。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

