利用gcc命令可以生成动态链接库和静态链接库,假设有三个文件,hello.c hello.h main.c内容如下:
/*hello.c*/
#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"
void main()
{
hello("world");
}
1.静态链接库创建
在上面三个文件里面hello.c包含了函数hello原型,hello.h包含了对原函数的声明,main.c调用函数。
无论是静态库还是动态库都是由.o文件创建的。
1输入命令:
gcc -c hello.c //表示只编译不链接,以后由主程序链接这个文件。
2.hello.o文件创建静态链接库
ar crv libmyhello.a hello.o
3.静态库制作完成,只需要在使用到这些公共函数的源程序里包含这些公共函数的声明,然后利用gcc命令在生成目标文件时指明静态库名字,gcc会将静态库从公共函数连接到目标文件,gcc会在静态库名字前面加lib,尾部追加.a得到静态库文件名字查找库文件。
下面就可以输入命令
gcc -o hello main.c -L. -lmyhello
值得注意的是-L后面有个'.'。然后运行程序会输出结果,静态链接库,链接的时候就加到程序里,所以删除原来的静态库程序也可以运行。
2.动态链接库创建
还是从.o文件开始的。gcc -shared -fPCI -o libmyhello.so hello.o
生成了动态库,libmyhello.so。对动态库的调用和静态库一样,默认下gcc会搜索路径/usr/lib 和/lib等目录寻找动态库,需要将动态库放到这个目录下。如果删除的话,程序是无法运行的,因为它是运行的时候加载的。