#include <stdio.h>
void dll_fun(void)
{
printf("hi,sir!\n");
}
- 创建静态库,分二步:
gcc -c -fPIC dll.c //create dll.o
gcc -shared -fPIC -o libdll.so dll.o //create libdll.so
至此,动态库创建完成。
参数-fPIC使.so文件的代码段变为真正意义上的共享,
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位。
3. 测试动态库的调用
创建main.c文件,内容如下:
#include <stdio.h>
int main(void)
{
printf("call dll(.so)\n");
dll_fun();
return 0;
}
编译命令:
gcc -o main main.c -L. -ldll
其中-L.:表示在当前目录查找库文件,如果写为:-L./lib 则表示在当前目录的lib目录下查找库文件。
-ldll:表示查找的动态库名字为dll,生成的动态库名字为 libdll.so,链接时需要去头去尾,去掉lib和.so,剩下的dll即为要查找的名字。
- 运行程序:
./main
结果输出: call dll(.so) hi,sir!