linux下有两种库:动态库和静态库(共享库)

二者的不同点在于代码被载入的时刻不同。

静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大。

动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。

不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库(共享库)的实例。

静态库和动态库的最大区别,静态情况下,把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库

动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在

一 静态库

这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

静态库的代码在编译时链接到应用程序中,因此编译时库文件必须存在,并且需要通过“-L”参数传递路径给编译器,应用程序在开始执行时,库函数代码将随程序一起调入进程内存段直到进程结束,其执行过程不需要原静态库存在。

在UNIX中,使用ar命令创建或者操作静态库

ar archivefile objfile

archivefile:archivefile是静态库的名称

objfile:objfile是已.o为扩展名的中间目标文件名,可以多个并列

参数 意义

-r 将objfile文件插入静态库尾或者替换静态库中同名文件

-x 从静态库文件中抽取文件objfile

-t 打印静态库的成员文件列表

-d 从静态库中删除文件objfile

-s 重置静态库文件索引

-v 创建文件冗余信息

-c 创建静态库文件

example:

/****************** hello.h **************/  void hello(void);  
/****************** hello.cpp **************/  #include<iostream>
#include"hello.h"  using namespace std;  void hello(void)  {            cout <<"Hello "<<endl;
}  
/****************** main.cpp **************/  #include"hello.h"  int main(int argc,char *argv[])
{          hello();          return 0;  }  

Linux下动态库(.so)和静态库(.a) 的区别相关推荐

  1. PHP编译为静态库,Linux下将Tinyxml编译为静态库

    转载请注明来源:Linux下将Tinyxml编译为静态库 一个应用需要在linux服务器上运行,不能保证每个服务器都有应用依赖的库,又懒得每个服务器都去安装下,也不太现实,于是就将应用所用到的库全部编 ...

  2. linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...

    一.基本概念1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主 ...

  3. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  4. Linux下GCC生成和使用静态库和动态库详解(二)

    2.1准备好测试代码hello.h.hello.c和main.c: hello.h(见程序1)为该函数库的头文件. hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏 ...

  5. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  6. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  7. g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解

    下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 在windows环境下,我们通常在IDE如VS的 ...

  8. PHP编译为静态库,makefile生成静态库和动态库

    库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...

  9. gcc g++ Linux下动态库_静态库

    关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...

  10. Linux下动态库(.so)和静态库(.a)

     linux下有两种库:动态库和静态库(共享库) 二者的不同点在于代码被载入的时刻不同. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大. 动态库(共享库)的代码在可执行程序运行时才 ...

最新文章

  1. 2021年大数据Spark(六):环境搭建集群模式 Standalone
  2. java 连连看_java—连连看-实现封装
  3. win7下构建swarm nodes实现跨host的容器之间的通信
  4. 磁盘调度算法java代码
  5. 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强
  6. python知识点总结(有空就往里面添加)
  7. boot lvm 分区_怎样使用kickstart创建逻辑卷管理(LVM)分区
  8. ubuntu下终端提示符设置
  9. java 反射 proper_JAVA提高四:反射基本应用
  10. [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数
  11. python3面向对象_Python3面向对象编程
  12. redis copy-on-write机制
  13. Ubuntu安装显卡驱动教程
  14. DELL 笔记本 触摸板 驱动安装 与 禁用启动
  15. 怎么样恢复移动硬盘格式化的数据呢?
  16. android u盘怎么打开文件夹图标不显示不出来了,U盘图标显示不正常怎么办,U盘图标怎么显示出来...
  17. 收藏这几个软件,让你轻松从视频里提取音频
  18. Ubuntu 18.04 LTS安装后要做的11件事情
  19. Spring单例Bean与单例模式的区别
  20. 物料主数据 分类视图导入 BAPI_OBJCL_CREATE

热门文章

  1. iphone6php怎么打开,苹果手机中的heic格式文件怎么打开
  2. Spring-@Value
  3. java string char数组_String在Java中真的是不可变吗?
  4. apache服务器性能不行,Apache服务器性能调优
  5. 鸿蒙系统空城计,鸿蒙系统到底什么时候用在手机上?
  6. android 动态单选,添加单选按钮动态︰android
  7. python文件操作的方法_python中文件操作的基本方法
  8. 金蝶kis商贸采购单商品代码_金蝶大包装小包装多单位计量单位换算关系用法,看了这个秒懂...
  9. gitlab VS github
  10. PHP实现简单的计算器