gcc生成静态库和动态库

本文详细介绍了Linux环境下如何使用GCC生成静态库(.a)和动态库(.so),包括创建、使用及两者差异。在生成过程中,通过实例演示了静态库和动态库的创建步骤,并探讨了在同名时GCC的优先调用规则。此外,还对比了静态库和动态库在文件大小上的区别,并强调了动态库在运行时需要在/usr/lib目录下。
摘要由CSDN通过智能技术生成

一、库

库分为静态链接和库动态链接库,作用相似但又有不同。

1. 静态链接库

静态链接库不同于动态链接库,在静态库情况下,函数和数据被编译进一个二进制文件,编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。
linux下的静态链接库是 *.a 文件,与动态链接库 .so 对应。linux下 .a 文件,如果编写了入口函数,也可以直接执行。
Windows下静态链接库是 .lib 文件,与动态链接库 .dll 相对应。

2. 动态链接库

动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。使用动态链接库可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。
动态链接库文件,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows 中,DLL 多数情况下是带有 “.dll” 扩展名的文件,但也可能是 ".ocx"或其他扩展名;Linux系统中常常是 “.so” 的文件。它们向运行于 Windows操作系统下的程序提供代码、数据或函数。程序可根据 DLL 文件中的指令打开、启用、查询、禁用和关闭驱动程序。

3.二者差异

静态库在程序编译时会被连接到目标代码之中,程序运行时不需要改静态库。动态库在程序运行时并不会被连接到目标代码中,而是在程序运行时才被载入,因此在程序运行时还需要动态库的存在。

以上库的相关知识取自: Linux系统下利用库生成可执行文件

二、 gcc生成动态库和静态库

1. 用前准备

nano生成例子程序hello.h,hello.c和main.c,此处存于文件夹jingmove(随便取文件名)
请添加图片描述

分别写入:
hello.h

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

hello.c

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

main.c

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

2. 生成静态库

① 将hello.c编译成.o文件
请添加图片描述
② 由.o文件创建静态库

请添加图片描述
③ 在程序中使用静态库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值