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

2024-11-06 08:35:00
admin
原创
339
摘要:问题描述:我知道.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:

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2772  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1702  
  在企业的产品研发与管理过程中,混合敏捷开发模式正逐渐成为主流。这种开发模式融合了多种开发方法的优势,旨在更高效地应对复杂多变的项目需求。而PLM项目管理平台作为企业产品全生命周期管理的重要工具,如何有效支持混合敏捷开发,成为众多企业关注的焦点。通过整合五大关键框架,PLM项目管理平台能够为混合敏捷开发提供强大的支撑,助...
PLM软件   0  
  PLM(产品生命周期管理)合规性审计在确保企业产品符合行业标准方面起着至关重要的作用。随着市场竞争的加剧和法规要求的日益严格,企业必须高度重视PLM合规性,通过有效的审计来保障产品从设计到报废的整个生命周期都能满足相关标准。本文将从流程、数据和人员三大维度深入探讨如何确保PLM合规性审计的有效实施,助力行业标准落地。流...
plm项目管理软件   0  
  PLM(产品生命周期管理)系统在现代企业的产品研发与管理中扮演着至关重要的角色。随着企业业务的不断拓展和产品的日益复杂,实现模块化开发成为提升PLM系统灵活性、可扩展性和维护性的关键。模块化开发能够将复杂的系统分解为多个相对独立、功能明确的模块,使得开发过程更加高效,不同模块之间的协同更加顺畅,也便于后续的升级与优化。...
国内plm系统排名   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用