Linux 静态库和动态库的制作

静态库的制作:

Lib.h

#ifndef LIB_H
#define LIB_H
void show();
#endif

Lib.c

#include "Lib.h"
#include <stdio.h>
void show() {
  printf("Hello Wrold!\n");
}

Program.c

#include "Lib.h"
int main() {
  show();
  return 0;
}

首先将Lib.c编译成Lib.o

gcc -c Lib.c -o Lib.o

在这里插入图片描述
然后将Lib.o打包为静态库

ar crs -o mylib.a Lib.o

在这里插入图片描述
然后生成可执行文件StaticProgram1

gcc Program.c mylib.a -o StaticProgram1

在这里插入图片描述
最后执行StaticProgram1

./StaticProgram1

在这里插入图片描述

动态库制作:
先生成Lib.so动态文件

gcc -fPIC -shared -o Lib.so Lib.c

在这里插入图片描述

然后生成DLLProgram1文件

gcc Program.c ./Lib.so -o DLLProgram1

在这里插入图片描述
最后执行

./DLLProgram1

在这里插入图片描述
从上述结果来看,静态链接和动态链接并没有什么区别。现在让我从其他角度来看看他们之间的区别。
静态链接的可执行文件比动态链接的可执行文件的占用空间更大。

StaticProgram1 的 所占字节大小16760 Byte在这里插入图片描述
DLLProgram1 的 所占字节大小16688 Byte
在这里插入图片描述
DLLProgram1所占字节数量小于StaticProgram1

静态链接的可执行文件若需要修改,则需要修改一个模块后,所有目标文件重新编译。
动态链接的可执行文件若需要修改,则仅需要修改动态链接所涉及的一个模块即可,不需要重新编译生成新的可执行文件,只需要将动态链接文件重新编译即可。

示例:
Lib.c

#include "Lib.h"
#include <stdio.h>
void show() {
  printf("Hello Wrold!\n");
  printf("Hello Wrold!\n");
}

重新生成Lib.so
在这里插入图片描述
执行./DLLProgram1
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值