您的位置:首页 > 其它

动态库(.so)函数调用

2014-03-27 11:01 99 查看
最近刚刚换工作,第一次接触到要从.so动态库文件里调用函数。目前只得到.so库文件和封装的各类函数接口。在网上搜了一些,然后根据自己的代码做了整理。

首先,理解动态库,Linux中的.so文件类似于Windows中的DLL,是动态链接库。当多个程序使用同一个动态链接库时,既能节约可执行文件的大小,也能减少运行时的内存占用。具体的如何编译生成.so可以参照linux下gcc命令。

具体在调用过程中主要用到dlopen()函数和dlsym()函数,一个为打开.so库,一个为找到需调用的函数。

1.根据dlopen()写了一个打开函数。

ST_VOID * open_soXXX()

{

ST_VOID *p = NULL;

ST_CHAR *error = NULL;

p = dlopen("/lib/libXXXX.so",RTLD_LAZY);

error = dlerror();

if(error)

{

p = dlopen("lib/libXXXX.so",RTLD_LAZY);

error = dlerror();

if(error)

{

printf("error:%s", error);

}

}

return p;

}

ST_VOID、ST_CHAR就是void和char类型,因为工程需要,所以进行修改。

2.根据dlsym()写了一个相应的调用过程

ST_INT (*get_num)();
//需要调用的get_num()原型为int get_num();。另外这里get_num命名可随意,这里必须要定义成指针,因为获取的是要调用函数的地址。

get_num=(int(*)())dlsym(handle,"get_num");
// 这里参数handle是dlopen()返回的指针,参数get_num是封装在库里的函数名,也就是你要调用的函数名。

int i=get_num(); //这里就可以直接调用该函数了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: