dlopen方式

void  *FunctionLib;  //动态库指针
const char *dlError; //错误信息指针 
typedef int (*FUN)(char *param1,char *param2,char *param3);
FunctionLib = dlopen("xxxxx.so",RTLD_LAZY);
dlError = dlerror();
if (dlError)
{
    printf("load library xxxxxx.so error:%s!/n", dlError);
    return -1;
}

int (*fun)(char *param1,char *param2,char *param3);
 
fun = (FUN) dlsym( FunctionLib, FuncName);
dlError = dlerror();
if( dlError )
{
    printf("load library function RuleCheck error:%s!/n", dlError);
    return -1;
}
else
{
    //根据判断值调用判断函数
    if((*fun)(param1,param2,param3)<0)
    { 
 return -1;
    }
}

### C语言 `dlopen` 函数使用方法 在Linux环境下,`dlopen` 是用于装载共享对象(即动态链接库)的一个重要函数。通过此函数可以实现程序运行期间按需加载模块或功能扩展。 #### 加载动态库并调用其中定义的方法 当需要打开一个指定路径下的共享库文件时,可利用如下方式: ```c #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main() { void* handle; double (*cosine)(double); char* error; // 打开共享库 handle = dlopen("./mylib.so", RTLD_LAZY); // 使用RTLD_NOW也可以[^2] if (!handle) { fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } // 清除任何现有的错误 dlerror(); *(void **) (&cosine) = dlsym(handle, "cos"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); exit(EXIT_FAILURE); } printf("%f\n", (*cosine)(2.0)); // 关闭共享库 dlclose(handle); return 0; } ``` 上述代码展示了如何使用 `dlopen()` 来加载名为 `"./mylib.so"` 的共享库,并从中获取名为 `"cos"` 的符号地址作为函数指针来执行相应的操作。这里需要注意的是,在实际应用中应当确保所访问的符号确实存在于目标共享库内;另外就是对于不再使用的句柄要及时释放资源以防止内存泄漏等问题的发生。 为了使这段代码能够正常工作,还需要创建对应的 `.so` 文件,这可以通过下面命令完成编译过程: ```bash gcc -shared -fPIC -nostartfiles -o mylib.so mylib.c ``` 之后再编译主程序并与 `-ldl` 链接选项一起连接到标准C库中的动态加载支持部分: ```bash gcc -o main main.c -ldl ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值