其他分享
首页 > 其他分享> > GCC生成静态库和动态库

GCC生成静态库和动态库

作者:互联网

一、库的简述

库(Library)是由系统提供的一组具有特定功能的函数的集合,是为提高开发效率和运行效率而设计的。从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。

二、库的生成

实例使用:
1、创建一个目录
在这里插入图片描述

mkdir:用于创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前已有的目录;
ls:用来打印当前目录清单或者打印出指定目录下的文件及文件清单。ls命令在打印文件清单时,还可以查看文件权限、目录信息等等;

2、hello代码

“hello.c”

#include"hello.h"
#include<stdio.h>
 
void hello(const char *name)
{
	  printf("hello %s\n",name);
}

“hello.h”

#ifndef HELLO_H_
#define HELLO_H_
 
void hello(const char *name);
 
#endif

“main.c”

#include "hello.h"
int main()
{
	  hello("world!");
	  return 0;
}

3、gcc编译得到.o文件
在这里插入图片描述

cd:进入目录文件;
gedit:进入文本编辑器;

三、创建静态库

1、创建静态库的工具:ar
静态库文件命名规范:以lib作为前缀,是.a文件
ar -crv libmyhello.a hello.o
在这里插入图片描述
2、程序中使用静态库
方式一:
gcc -o hello main.c -L. -lmyhello 在这里插入图片描述
方式二:
gcc main.c libmyhello.a -o hello
在这里插入图片描述
方式三:
先生成main.o,再生成可执行文件libmyhello.a
gcc -c main.c 或
gcc -o hello main.c libmyhello.a
在这里插入图片描述
3、验证静态库的特点
在删掉静态库的情况下,运行可执行文件,发现程序仍旧正常运行,表明静态库跟程序执行没有联系。同时,也表明静态库是在程序编译的时候被连接到代码中的。
在这里插入图片描述

四、创建动态库

1、创建动态库的工具:gcc
动态库文件命名规范:以lib作为前缀,是.so文件

gcc -shared -fPIC -o libmyhello.so hello.o
在这里插入图片描述

shared:表示指定生成动态链接库,不可省略;
-fPIC:表示编译为位置独立的代码,不可省略;

2、在程序中执行动态库
gcc -o hello main.c -L. -lmyhello 或
gcc main.c libmyhello.so -o hello

再运行可执行文件hello,会出现错误
在这里插入图片描述
解决方法:将libmyhello.so复制到目录/usr/lib中。由于运行时,是在/usr/lib中找库文件的。
在这里插入图片描述

mv:将源文件重命名为目标文件, 或将源文件移动至指定目录;
注意:在拷贝文件时,需要是root用户才可执行,在命令前加上sudo,表示允许普通用户使用超级用户权限;

3、静态库与动态库的比较
gcc编译得到.o文件 gcc -c hello.c
创建静态库 ar -crv libmyhello.a hello.o
创建动态库 gcc -shared -fPIC -o libmyhello.so hello.o
使用库生成可执行文件 gcc -o hello main.c -L. -lmyhello
执行可执行文件 ./hello

————————————————————————————
参考资料:
gcc生成静态库.a和动态库.so

标签:gcc,libmyhello,静态,GCC,生成,main,hello,动态
来源: https://blog.csdn.net/Monajim/article/details/120624897