Windows 和 Linux上的动态库,静态库的概念基本一致, 在使用上也是有很多相似之处的。
1. 静态链接库的创建和使用:
(1) 在mylib.h中声明所要导出的函数.
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H
(2) 在mylib.c 中实现该函数:
#include <stdio.h>
#include "mylib.h"
void hello(const char *name)
{
printf("Hello %s!/n", name);
}
(3) 编译mylib.c生成目标文件:
gcc -o mylib.o -c mylib.c
(4) 将目标文件加入到静态库中,
ar rcs libmylib.a mylib.o //使用ar命令来创建和修改静态库。
(5) 将静态库拷贝到Linux的库目录下(/usr/lib 或 /lib)
cp libmylib.a /usr/lib/
(6) 调用库函数:
#include <stdio.h>
void hello(const char *name)
{
printf("Hello %s!/n", name);
}
编译命令:gcc -o test test.c -lmylib
mylib 是库libmylib.a的中间部分。静态库通常以Lib开头,.a 结束。
2.动态库的创建和使用:
(1) 编译生成 .so 文件:
gcc -fPIC -shared -o libmylib.so mylib.c
(2) 两种方式调用动态链接库中的函数。
- 和静态库一样,使用gcc命令:
gcc -o test test.c /usr/lib/libmylib.so
- 通过系统函数来使用动态链接库。这与windows 中的使用如出一辙。
编译命令: gcc -o testso testso.c -ldl
可以看到 dlopen; dlsym; dlclose 分别对应windows 中的 LoadLibrary; GetProcAddress; FreeLibrary