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

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

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/85054997