编译生成so库
gcc -fPIC -shared caculate.c -o libcaculate.so
-fPIC 压制警告
-shared 动态库
-o 生成目标的文件名
caculate.c
int add(int a,int b){
return (a*b);
}
编译生成可执行文件
gcc -rdynamic -o main main.c
-rdynamic 生成可执行文件
-o 目标文件名
main是linux环境下的一个可执行文件。
main.c
#include<stdio.h>
#include<stdlib.h>
//Linux提供的一套API来动态装载库
#include<dlfcn.h>
typedef int (*ADD)(int,int);
int main(){
//dlopen,打开一个库,并为使用该库做些准备
void *handle=dlopen("./libcat.so",RTLD_LAZY);
ADD add=NULL;
//dlsym,在打开的库中查找符号的值
*(void **)(&add)=dlsym(handle,"add");
int reslut=add(2,5);
printf("%d\n",reslut);
return 0;
}
一次性手动编译动态库
gcc -c main.c -o main.o
gcc -c minus.c -o minus.o
gcc -c mulit.c -o mulit.o
gcc -c plus.c -o plus.o
gcc main.o minus.o mulit.o plus.o -o myapp