通过gcc创建静态库.a、动态库.so及其使用

本文介绍了如何通过gcc创建静态库.a和动态库.so,并详细阐述了创建过程中的关键步骤,包括生成.o文件,使用ar命令打包生成静态库,以及动态库的创建和使用。同时,讲解了如何查看和使用这些库。

gcc的常用选项

-v:查看gcc版本
-c:只编译,生成.o文件,不进行链接
-g:包含调试信息,方便使用gdb调试
-D:编译时定义宏


静态库的创建和使用

这里使用命令ar,常用的选项是:
-r:替换归档中已有的文件或加入新文件
-t:显示归档文件的内容
-x:从归档文件中解压文件,利用选项-o可以指定解压的文件,如ar -x libfunc.a -o add.o

文件准备:

// file1:add.c
int add(int a, int b) {
	return a + b;
}
// file2:sub.c
int sub(int a, int b) {
	return a - b;
}
// file3:main.c
#include <stdio.h>
int add(int a, int b);
int sub(int a, int b);
int main() {
	printf("3 + 1 = %d\n", add(3, 1));
	printf("3 - 1 = %d\n", sub(3, 1));
	return 0;
}
1)利用gcc创建.o文件

在这里插入图片描述

2)使用ar命令对.o文件进行打包生成.a文件和查看

在这里插入图片描述

3)使用静态库.a文件

在这里插入图片描述


动态库的创建和使用

文件准备,需要创建这样的目录树:
在这里插入图片描述

// file1:add.c
int add(int a, int b) {
	return a + b;
}
// file2:sub.c
int sub(int a, int b) {
	return a - b;
}
// file3:main.c
#include <stdio.h>
#include "common.h"
int add(int a, int b);
int sub(int a, int b);
int main() {
	printf("3 + 1 = %d\n", add(3, 1));
	printf("3 - 1 = %d\n", sub(3, 1));
	return 0;
}
// file4:common.h
int add(int a, int b);
int sub(int a, int b);
1)利用gcc创建.so文件到指定目录lib

这里使用到了两个选项,分别是-fpic-shared
在这里插入图片描述

2)使用动态库

在这里插入图片描述
可以使用ldd命令查看该可执行文件含有什么动态库
在这里插入图片描述
执行该可执行文件
在这里插入图片描述

reference to :link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值