预构建库和静态库、共享库有什么区别?

预构建库和静态库、共享库有什么区别?


NDK
预构建库
静态库
共享库
7天前
123浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
HMOS_Professor

预构建库和静态库、共享库并不是完全对立的概念,它们之间既有区别又有联系。


预构建库

  • 定义:预构建库指的是已经提前编译好的库文件。开发者在使用时,无需重新编译其源代码,可直接集成到项目中。
  • 特点:重点在于 “预构建”,即提前完成编译,节省了开发者的编译时间,提高了开发效率。它可以是静态库的预构建版本,也可以是共享库的预构建版本。
  • 使用场景:适用于开发者不想公开源代码,仅提供编译好的库供他人使用的场景;或者在项目中频繁使用某些库,为避免重复编译而采用预构建的方式。


静态库

  • 定义:静态库是在编译时被完整地复制到可执行文件中的库。它的文件扩展名通常为​​.a​​(在 Unix/Linux 系统中)或​​.lib​​(在 Windows 系统中)。
  • 特点
  • 独立性:一旦可执行文件被编译完成,静态库就不再依赖于外部的库文件,因为它的代码已经被嵌入到可执行文件中。
  • 占用空间大:由于每个可执行文件都包含了静态库的完整副本,会导致可执行文件的体积增大。
  • 更新困难:如果静态库需要更新,那么所有使用该静态库的可执行文件都需要重新编译。
  • 使用场景:当对程序的独立性要求较高,不希望依赖外部库时,或者在一些对性能要求极高,不希望有动态加载开销的场景下使用。


共享库

  • 定义:共享库也称为动态链接库,在运行时才会被加载到内存中。它的文件扩展名通常为​​.so​​(在 Unix/Linux 系统中)或​​.dll​​(在 Windows 系统中)。
  • 特点
  • 共享性:多个可执行文件可以共享同一个共享库的副本,减少了内存的占用。
  • 体积小:可执行文件只包含对共享库的引用,而不包含库的实际代码,因此可执行文件的体积较小。
  • 更新方便:如果共享库需要更新,只需要替换相应的库文件,而不需要重新编译所有使用该库的可执行文件。
  • 依赖管理复杂:需要确保在运行时系统中存在正确版本的共享库,否则程序可能无法正常运行。
  • 使用场景:在需要节省内存、方便库的更新和维护,以及多个程序需要共享某些功能的场景下使用。



区别总结

  • 预构建库与静态库、共享库的关系:预构建库是一个更宽泛的概念,它可以是预构建的静态库,也可以是预构建的共享库。预构建强调的是编译状态,而静态库和共享库强调的是库的链接方式。
  • 静态库与共享库的区别:主要体现在链接方式、文件体积、内存占用、更新维护等方面。静态库在编译时链接,体积大、占用内存多,但独立性强;共享库在运行时链接,体积小、占用内存少,但依赖管理复杂。
分享
微博
QQ
微信
回复
7天前


相关问题
NDK工程构建中“构建”是什么
190浏览 • 1回复 待解决
DevEco构建Hap和APP什么区别
17027浏览 • 1回复 待解决
HarmonyOS 动态卡片和静态卡片的区别
627浏览 • 1回复 待解决
输出静态的最佳实践
974浏览 • 1回复 待解决
c编译的so,导出成native的har静态
918浏览 • 1回复 待解决
HarmonyOS静态是否是单例
583浏览 • 1回复 待解决
引用js静态检查报错
1316浏览 • 1回复 待解决
HarmonyOS 有关共享的问题
1035浏览 • 1回复 待解决
HTTP原生与RCP区别什么
1042浏览 • 1回复 待解决
HarmonyOS 怎么调用C语言的.a静态
1288浏览 • 1回复 待解决
@StorageProp与@StorageLink什么区别
1547浏览 • 1回复 待解决
UIAbility和ExtensionAbility什么区别
1614浏览 • 1回复 待解决
@Entry与@Component什么区别
2228浏览 • 2回复 待解决
LocalStorage和AppStorage什么区别
1939浏览 • 2回复 待解决
HarmonyOS ffmpeg静态引用不成功
1018浏览 • 1回复 待解决