怎样创建Linux静态库和动态库

1. 基本概念

静态库:链接时,库与编译生成的 .o 文件一起打包到可执行文件中。 linux / windows 下扩展名分别为:.a / .lib

动态库:链接时,不会打包到可执行文件中, 执行时会动态的加载动态库。 linux / windows 下扩展名分别为:.so / .dll

区别主要体现在:

a、可维护性。

合入更新。合入动态库的更新,只要替换库即可。但合入静态则需要重新链接,生成新的可执行程序,全量更新。

环境依赖。若包含静态库,编译成功后不依赖环境。动态库则存在依赖关系,需要环境中存在对应的动态库。

b、大小

空间利用率。若依赖相同静态库,则存在多份拷贝。

可执行文件大小。静态库文件较大。

c、动态库可以实现进程之间的资源共享,因此也称为共享库。

2. 静态库的创建与使用

静态库本质就是一组 .o 组成的压缩文件,扩展名为 .a / .lib

代码如下:

ar -crv libXXX.a mmmm.o nnnn.o

XXX 是库名,mmmm.o nnnn.o 是要打包的目标文件。crv 参数,含义分别是

c: do not warn if the library had to be created

r: replace existing or new file(s) into the archive

v: be verbose

使用时,只需在代码中引入 头文件,链接时,指定静态库的搜索路径(-L选项)和静态库名(不需要lib前缀和.a后缀,-l选项)。

代码如下:

g++ test.cpp -L.。/StaticLibrary -lXXX

3. 动态库

Window与Linux执行文件格式不同,在创建动态库的时候有一些差异。

Windows 下执行文件是 PE 格式,动态库需要一个DllMain函数做出初始化的入口,通常在导出函数的'声明时需要有_declspec(dllexport)关键字。

Linux下 gcc 编译的执行文件默认是 ELF 格式,不需要初始化入口,亦不需要函数做特别的声明,编写比较方便。

linux 下动态库的命名格式同静态库,为 libXXX.so 格式。

动态库的创建,使用编译器即可,不需要像静态库一样使用专门的打包工具。

若要创建动态库,源码编译时添加 -fPIC 选项,链接时添加 -shared 选项。

代码如下:

g++ -fPIC -shared -o libXXX.so xxx.cpp

用法同静态库,

代码如下:

g++ test.cpp -L.。/DynamicLibrary -lXXX

只是需要设置下搜索路径。默认搜索路径:/lib/, /usr/lib。

设置搜索路径:

编辑 /etc/ld.so.conf,设置搜索路径

运行 ldconfig ,重建 /etc/ld.so.cache 文件。设置生效。

4. 相关工具

ldd 查看程序依赖的共享库(动态库)

代码如下:

gcc / g++ 参数 -I(大写 ‘i’),-L(大写‘l’),-l(小写‘L’)

1、 -I(大写 ‘i’) 头文件目录

2、-L(大写‘l’) 库目录

3、-l(小写‘L’) 库名

大写是目录,小写是库。

【怎样创建Linux静态库和动态库】相关文章:

linux怎么生成动态库,怎样创建Linux静态库和动态库相关推荐

  1. 【linux学习笔记】ps top 查看的静态命令和动态命令

    查看进程的静态命令ps 和动态命令top 学习书籍<鸟哥的LINUX私房菜 基础学习篇 (第四版)> 查看进程一共三个命令:ps , top, pstree ps: 静态查看 top: 动 ...

  2. 游标(概念、优点、分类、静态游标的使用(显示游标(显示游标的属性、遍历显示游标、显示游标的FOR循环)、隐式游标(隐式游标的属性))、动态游标的使用、静态游标和动态游标的区别、更新或删除当前游标数据

    文章目录 游标 游标概念 游标优点 游标分类 静态游标的使用 显示游标 显示游标的属性 遍历显示游标 显示游标的FOR循环 接收显式游标数据的数据类型(普通变量.记录变量.集合变量) 通过游标更新.删 ...

  3. 64.多态性实现机制—静态分派与动态分派(方法解析、静态分派、动态分派、单分派和多分派)

    64.多态性实现机制-静态分派与动态分派 64.1.方法解析 64.2.静态分派 64.3.动态分派 64.4.单分派和多分派 64.多态性实现机制--静态分派与动态分派 64.1.方法解析 Clas ...

  4. linux如何生成tar文件内容,在Linux系统中创建tar.gz文件的方法及实例讲解

    本文介绍在Linux系统中创建tar.gz文件的方法,及实例讲解. 介绍 tar存档是一个文件,用于存储其他文件的集合,包括有关它们的信息,例如所有权.权限和时间戳. 在Linux操作系统中,可以使用 ...

  5. linux建立u盘引导分区表,创建Linux之USB启动盘

    本文以Red Hat 为例,使用朗科的双启动型优盘建立优盘的Linux启动盘. 下载相关软件:e3,bvi,Linux内核. 编译内核 首先计算机的主板必须要支持USB硬盘的启动方式,并且所使用的优盘 ...

  6. linux redhat 下载_使用Vmware创建Linux(Ubuntu)系统

    01 我们平时多数使用Windows系统,但在计算机相关企业多数使用的是Linux操作系统.计算机专业的研究生应该也用的比较多. 之前多少接触过一点,但在脑子里关于Linux的知识依然混乱.甚至要动手 ...

  7. linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...

    本文主要向大家介绍了Linux运维知识之Linux:复制并创建目标目录,如果它不存在,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 我需要一个命令(或者可能是cp的一个选项)来 ...

  8. linux可以生成pdb调试信息吗,Linux通过使用pdb简单调试python计划

    python自带的调试工具库:pdb # -*- coding:utf-8 -*- def func(num): s = num * 10 return s if __name__ == '__mai ...

  9. linux cp 目录不存在自动创建,Linux:复制并创建目标目录,如果它不存在

    我需要一个命令(或者可能是cp的一个选项)来创建目标目录(如果它不存在的话). 示例: cp -? file /path/to/copy/file/to/is/very/deep/there test ...

  10. 【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用

    上一篇文章学习了编译的过程,点击链接查看:[C语言进阶深度学习记录]十五 编译过程简介,每一个C源文件编译后将会生成目标文件,那么这些目标文件,还需要链接起来,生成可执行文件. 文章目录 1 链接的意 ...

最新文章

  1. 某银行信用卡中心——大数据反欺诈应用案例 2017-06-23 10:54 本篇案例为数据猿推出的大型“金融大数据主题策划”活动(查看详情)第一部分的系列案例/征文;感谢 百融金服 的投递 作为整体
  2. 3DSlicer29:Debug or Dev-170918
  3. cpu的基本硬件组成
  4. nginx 如何显示真实ip
  5. Nginx大规模并发原理
  6. 处理工行b2c上海机构问题反思
  7. idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
  8. pluswell双机软件基本概述
  9. 通过模板生成Excel表格——XLSTransformer
  10. 奥维kml文件制作工具_如何将平面控制点导入Google Earth、奥维互动地图及手机奥维互动地图APP里面?...
  11. 通达信与飞狐不同函数的替代
  12. Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向...
  13. DaZeng:Vue全家桶实现小米商城(二)
  14. 拆弹专家【爆改车间主任】学习笔记(2)小结
  15. 如何把50多张jpg图片合成一张PDF图片?——下载了破解版PS也不怎么会用的傻瓜极简做法用Word一招解决
  16. 标准柯西分布_对柯西分布性质的进一步讨论
  17. 瑞吉外卖项目实践(个人精简升级版)
  18. AcWing寒假每日一题2058. 笨拙的手指
  19. python 十进制转二进制
  20. 聊聊电商交易平台的架构设计(干货)

热门文章

  1. 美国保险服务协会联合IBM开发区块链自动化报告平台
  2. 飞畅科技关于网管型环网交换机的工作原理介绍
  3. 永辉超市第三季营收201亿:同比降9.5% 扣非后净亏4.7亿
  4. Java-黑马Java学习作业-day07综合练习
  5. 互联网快讯:吉利正式收购魅族;胰岛素集采在31省全面落地
  6. 电商指标体系之NPS体系
  7. vmware centos7 kubeadm 快速搭建k8s集群(学习尚硅谷课件)
  8. 【天光学术】财务会计论文:企业会计实务中外币资产核算问题研究(节选)
  9. 2023新版iApp新软件库系统源码+界面简约大气
  10. 测试万网的php服务器