静态链接库和动态链接库的区别

本文介绍了静态链接库和动态链接库的区别。静态链接库在编译时会被合并到可执行文件中,占用磁盘空间大但运行速度快。动态链接库在运行时加载,节省空间,便于更新和维护,但需要解决库位置和一致性问题。文章通过Linux平台的实例演示了两种库的创建和使用方法,并提到了动态链接库的函数获取方法。
摘要由CSDN通过智能技术生成

静态链接库和动态链接库的区别

一、静态链接库

预编译->编译->汇编->链接

Linux:

生成目标文件

g++ -c source.cpp -o source.o

打包成静态链接库

ar -crv source.a source.o

使用静态链接库

g++ test.cpp -L静态链接库目录 -l静态链接库名称没有后缀

 

二、动态链接库

使用动态链接库是为了规避静态链接库的两个问题。

一个是多个副本的问题,对于静态库都是在编译时刻将其编译到源代码当中,在运行时刻不会再和静态库有任何关系。这样的好处是快,但是造成了空间的浪费

另一个是发布的一致性问题和更新问题,如果是静态库,如果对静态库进行了更新,那么需要重新编译代码,并且提示用户进行下载整个软件,这样会造成很多不变,浪费大量带宽。如果是动态库,只需要更新相应的动态链接库即可,整个软件不需要修改。

Linux平台:

生成目标文件

g++ -fPIC source.cpp -o source.o

动态链接库

g++ -shared source.so source.o

或者合并为一个命令

g++ -fPIC -shared source.so source.cpp

关于在使用中定位动态链接库的位置,需要注意一些问题,默认动态链接库是在/lib 或者 /usr/lib之下的

如果要在其他文件夹之下,需要修改 /etc/ld.so.cache文件


动态链接库的使用

动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接库,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接库。

程序代码如下:

复制代码
/*caculate.h
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值