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<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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容