linux 下动态库使用示例

来源:互联网 发布:csgon卡优化 编辑:程序博客网 时间:2024/06/05 23:59
linux调用库的方式有三种:1.静态链接库2.动态链接库3.动态加载库其中1,2都是在编程时直接调用,在链接时加参数-l进行链接第三种需要在编程时使用dlopen等函数来获取库里面函数的定义,然后进行调用.不过对于没有提供头文件的动态库,只能dlopen等函数来调用

 

 

 gcc getmaxlen.c -fPIC -shared -o libtest.so

gcc main.c -ldl -g

#include <stdio.h>#include <dlfcn.h> // 显式加载需要用到的头文件int  main(){    void *pdlHandle = dlopen("./libtest.so", RTLD_LAZY); // RTLD_LAZY 延迟加载int ret;    char *pszErr = dlerror();int array[]={11,5,8,13,9,5};    if( !pdlHandle || pszErr )    {        printf("Load mylib failed!\n");        return 1;    }// int getMaxLen(int *sel,int N)    int (*Print)(int *,int) = dlsym(pdlHandle, "getMaxLen"); // 定位动态链接库中的函数    if( !Print )    {        pszErr = dlerror();        printf("Find symbol failed!%s\n", pszErr);        dlclose(pdlHandle);        return 1;    }printf("Print 0x%x\n", (int*) Print);    ret = Print(array, sizeof (array)/sizeof(int)); // 调用动态链接库中的函数    dlclose(pdlHandle); // 系统动态链接库引用数减1    printf("result %d\n", ret);    return ret;}

0 0
原创粉丝点击