C语言从代码中加载动态链接库过程解析
这篇文章主要介绍了C语言从代码中加载动态链接库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
函数:void*dlopen(constchar*filename,intflag);
功能:打开动态链接库文件
参数:filename动态链接库文件名
flag打开方式,一般为RTLD_LASY
返回值:库指针
函数:char*dlerror(void);
功能:获取错误值
返回值:错误值
函数:void*dlsym(void*handle,constchar*symbol);
功能:获取动态链接库中指定函数的指针
参数:handle库指针
symbol函数名称
返回值:与参数symbol名称对应的函数的指针
函数:intdlclose(void*handle);
功能:关闭动态链接库文件
参数:库指针
返回值:
源码
/*main.c*/ #include//相关函数头文件 #include intmain(void) { constchar*src="HelloDymatic"; int(*pStrLen)(constchar*);//函数指针 void*pHandle=NULL;//库指针 char*pErr=NULL;//错误指针 //打开动态链接库并检查是否有错误发生 pHandle=dlopen("./libstr.so“,RTLD_LASY); pErr=dlerror(); if(!pHandle||pErr!=NULL){printf("Failedloadlibrary!\n%s\n",pErr);return-1;} //获取StrLen函数地址并检查是否有错误发生 pStrLen=dlsym(pHandle,"StrLen"); pErr=dlerror(); if(!pStrLen||pErr==NULL){printf("%s\n",pErr);return-1;} //调用StrLen函数 printf("Thestringlengthis:%d\n",pStrLen(src)); //关闭库文件 dlclose(pHandle); return0; ]
运行以下命令编译成可执行文件。-L./当前目录,-lstr为StrLen函数所在库文件,-ldl为dlopen等相关函数所在库文件
gcc-otestmain.c-L./-lstr-ldl
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。