.so、.la、.a库文件有什么区别?

2024-11-05 08:38:00
admin
原创
38
摘要:问题描述:我知道.so文件是一种动态库(许多线程可以共享此类库,因此无需在内存中保存多个副本)。但是.a和之间有什么区别.la?这些都是静态库吗?如果动态库比静态库有很大优势,为什么仍然有很多静态库?我什么时候应该尝试将代码构建到.so或中.a?[mirror@home ins_openvpn]$ ls li...

问题描述:

我知道.so文件是一种动态库(许多线程可以共享此类库,因此无需在内存中保存多个副本)。但是.a和之间有什么区别.la?这些都是静态库吗?

如果动态库比静态库有很大优势,为什么仍然有很多静态库?我什么时候应该尝试将代码构建到.so或中.a

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so

解决方案 1:

文件类型细分

.so文件是动态库。后缀代表“共享对象”,因为与库链接的所有应用程序都使用同一个文件,而不是在生成的可执行文件中复制一份。

.a文件是静态库。后缀代表“存档”,因为它们实际上只是原始 .o 目标文件的存档(使用ar命令创建 - 该命令的前身tar现在仅用于创建库)。

.la文件是GNU“libtools”软件包用来描述组成相应库的文件的文本文件。您可以在此问题中找到有关它们的更多信息:libtool 的 .la 文件有什么用?

静态与动态

静止的

  • 优点:用户始终使用您在应用程序中测试过的库版本,因此不会出现任何令人惊讶的兼容性问题。

  • 缺点:如果库中的问题已修复,您需要重新分发应用程序才能利用它。但是,除非该库是用户可能会自行更新的库,否则您可能还是需要这样做。

动态的

  • 优点:您的进程的内存占用更小,因为用于该库的内存在使用该库的所有进程之间分摊。

  • 优点:库可以在运行时按需加载;这对插件来说很好,因此您不必在编译和安装软件时选择要使用的插件。可以随时添加新插件。

  • 缺点:有人试图安装应用程序的系统上可能不存在该库,或者他们安装的版本可能与应用程序不兼容。为了缓解这种情况,应用程序包可能需要包含库的副本,以便在必要时安装它。包管理器通常也可以缓解这种情况,它可以下载并安装任何必要的依赖项。

  • 缺点:链接时优化通常是不可能的,因此在高性能应用程序中可能会影响效率。请参阅 Wikipedia 对WPO 和 LTO的讨论。

动态库对于系统库(如)尤其有用libc。这些库通常需要包含依赖于特定操作系统和版本的代码,因为内核接口已经发生了变化。如果您将程序与静态系统库链接,它将仅在为此库版本编写的操作系统版本上运行。但是,如果您使用动态库,它将自动选择您运行的系统上安装的库。

解决方案 2:

除了给出的答案之外,还要说静态库就像是对象文件的集合。当调用静态库中的函数或其他任何内容时,链接器会在库中搜索引用的项目,并将定义引用项目的对象文件添加到可执行文件中。另一方面,共享库就像一个由所有其他对象文件组成的单个大对象文件。因此,如果您在共享库中调用符号,则可执行文件中会引用所有对象文件。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用