用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文件可知,静态库要小一点。