linux动态链接库的创建和使用

本文介绍如何通过GCC编译两个简单的数学运算源程序为共享库,并在主程序中使用dlopen等函数动态加载该共享库来调用其中的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、准备2个源程序/add.c/
intadd(inta,intb){
returna+b;}
/sub.c/
intsub(inta,intb){
returna-b;}
2、创建共享库
gcc -c -fPIC sub.c gcc -c -fPIC add.c
gcc -shared -fPIC -o libouyang.so sub.o add.o
3、动态加载动态库
所谓动态加载,就是程序自己在运行中,自己加载某个动态库。使用dlopen()打开动态库,dlclose()关闭动态库代码实现如下:

/*main.c*/
#include<stdio.h>#include<stdlib.h>
#include<dlfcn.h>/*dlopen()等动态库使用函数在dlfcn.h中定义*/
int main(void){
    int a=30;int b=20;
    /*动态库句柄*/
    void*handle_dll=NULL;
    /*函数指针*/
    int(*dl_add)(int,int);
    int(*dl_sub)(int,int);
    /*打开某个动态库,注意检查打开是否成功*/
    handle_dll=dlopen("libouyang.so",RTLD_LAZY);
    if(handle_dll==NULL){
        printf("libouyang.sonotfound!\n");exit(0);}
    /*查找符号表,完整的做法也应该检查符号表查找是否成功*/
    dl_add=dlsym(handle_dll,"add");
    dl_add=dlsym(handle_dll,"sub");
    /*查找符号表成功,可以正常使用动态库中的函数*/
    printf("%d+%d=%d\n",a,b,dl_add(a,b));
    printf("%d-%d=%d\n",a,b,dl_sub(a,b));
    /*关闭动态库*/
    dlclose(handle_dll);
    handle_dll=NULL;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值