静态连接库应用场景

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

Linux下生成.a静态库文件的方法:
例子:A公司负责hello.c B公司负责main.c,A公司需要向B公司提供静态连接库与.h文件即可
1.生成.o目标文件 
 gcc -c hello.c,这里生成hello.o
2.生成.a静态链接库文件(打包成一个压缩包,压缩包里面就是hello.o) 
 ar cr libmyhello.a hello.o 
 注:ar是用来创建,修改,和解压归档;
 c是ar的参数,表示创建一个归档;
 r是ar的参数,表示插入文件到归档里面。
 所以最终创建了libmyhello.a的归档,并往里面插入hello.o
3.使用静态链接库 
  gcc -o hello main.c -static -L. -lmyhello 
  注:-o 输出文件名 
  -static 表示链接静态链接库。
 如果不使用该参数,而-L指定的目录下同时拥有静态链接库和动态链接库,gcc会默认使用动态链接库。
 如果只有静态链接库,则会使用静态链接库。 
  -L 表示添加一个目录到目录列表,使得可以被-l用来搜索。 
  -l libary,当链接时,查找该library。
本质上,静态链接库就是.o文件的集合
A公司只需要向B公司提供libmyhello.a与hello.h即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态链接(Dynamic Link Library,DLL)和静态链接(Static Link Library,LIB)是用于代码共享和模块化开发的两种常见的文件形式。它们有以下几个主要区别: 1. 链接方式:静态链接编译时被链接到目标程序中,生成一个独立的可执行文件。动态链接在运行时被加载到内存中,并由多个应用程序共享使用。 2. 文件大小:静态链接会将其代码和数据完全复制到每个引用它的可执行文件中,因此会增加可执行文件的大小。而动态链接只有一个副本被加载到内存中,多个应用程序可以共享使用,因此可以减小可执行文件的大小。 3. 内存占用:静态链接被完全复制到每个应用程序的内存空间中,因此每个应用程序都需要占用相应的内存空间。而动态链接只有一个副本被加载到内存中,多个应用程序可以共享使用,因此可以减少内存占用。 4. 更新和维护:对于静态链接,当文件发生更新或修复时,需要重新编译和重新发布所有引用它的可执行文件。而对于动态链接,只需替换文件即可,不需要重新编译和发布可执行文件。 5. 运行时灵活性:动态链接的加载是在运行时进行的,可以方便地替换、更新和升级文件,而不需要重新编译和重新发布应用程序。这使得动态链接更适合于插件化架构和动态扩展。 需要注意的是,使用动态链接在运行时会有一定的性能开销,因为需要进行动态加载和解析。而使用静态链接则没有这个开销,但会增加可执行文件的大小。因此,在选择使用动态链接还是静态链接时,需要根据具体的应用场景和需求进行权衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值