linux环境下编译so库和编译可执行文件

编译生成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

#include
//Linux提供的一套API来动态装载库
#include

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

你可能感兴趣的:(linux环境下编译so库和编译可执行文件)