用gcc生成静态库和动态库

用gcc生成静态库和动态库

1.编辑生成例子程序 hello.h、hello.c 和 main.c

先用命令创建一个目录,如下图:
在这里插入图片描述

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 文件

使用gcc -c hello.c命令编译hello.c
使用ls查看是否成功
在这里插入图片描述

3.由.o 文件创建静态库

使用ar -crv libmyhello.a hello.o
然后使用ls查看结果
在这里插入图片描述
成功!

4.在程序中使用静态库

gcc main.c libmyhello.a -o hello
在这里插入图片描述
我们使用rm libmyhello.a删除静态库文件试试公用函数 hello 是否真的连接到目标文件 hello 中了。然后运行程序:在这里插入图片描述

5.由.o 文件创建动态库文件

动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀 lib,但其
文件扩展名为.so。例如:我们将创建的动态库名为 myhello,则动态库文件名就是 libmyh
ello.so。用 gcc 来创建动态库。
在系统提示符下键入以下命令得到动态库文件 libmyhello.so。
gcc -shared -fPIC -o libmyhello.so hello.o (-o 不可少)
我们照样使用 ls 命令看看动态库文件是否生成。
在这里插入图片描述

6.在程序中使用动态库

在程序中使用动态库和使用静态库完全一样,也是在使用到这些公用函数的源程序中包含
这些公用函数的原型声明,然后在用 gcc 命令生成目标文件时指明动态库名进行编译。我
们先运行 gcc 命令生成目标文件,将文件 libmyhello.so 复制到目录/usr/lib 中,再运行它看看结果。
命令: gcc -o hello main.c -L. -lmyhello
在这里插入图片描述
在这里插入图片描述
成功!

下面我们进行以下实操

一.使用静态库

1.创建函数

本次创建了3个函数main.c、sub1.c、sub2.c
在这里插入图片描述

main1.c代码
#include<stdio.h>
float x2x(int a,int b);
void x2y();
int main()
{
        int a,b;
        printf("a =");
        scanf("%d",&a);
        printf("b =");
        scanf("%d",&b);
        printf("%f",x2x(a,b));
        x2y();
        return 0;
}
sub1.c代码:
#include<stdio.h>
float x2x(int a,int b)
{
        float c;
        c=a+b;
        return c;
}
sub2.c代码:
#include<stdio.h>
void x2y()
{
        printf("Congratulations!");
}

2.编译函数并使用ls查看

在这里插入图片描述

3.使用静态库并查看

在这里插入图片描述
在这里插入图片描述
文件大小:
在这里插入图片描述

二.使用动态库

1.使用动态库并ls查看

在这里插入图片描述

2.生成.so文件并运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.总结

通过对比两种做法生成的test文件可知,静态库要小一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值