当前位置: 技术问答>linux和unix
调用动态链接库
来源: 互联网 发布时间:2017-05-04
本文导语: 想把一个动态链接库中的一个函数给导出来使用,也即导出它的函数地址 于是 int *DataHandle::myfun(void * pdlHandle) { pdlHandle = dlopen("./Dynamic_Lib/mylib.so", RTLD_LAZY); // RTLD_LAZY 延迟加载 char *pszErr = dlerror(); ...
想把一个动态链接库中的一个函数给导出来使用,也即导出它的函数地址
于是
int *DataHandle::myfun(void * pdlHandle)
{
pdlHandle = dlopen("./Dynamic_Lib/mylib.so", RTLD_LAZY); // RTLD_LAZY 延迟加载
char *pszErr = dlerror();
if( !pdlHandle || pszErr )
{
printf("Load Dynamic-lib failed!n");
return NULL;
}
void (*fun) (short *, short *, UINT ,UINT ) = dlsym(pdlHandle, "MeetingMixVoice"); // 定位动态链接库中的函数 (即函数指针) //此句报错.....................................
if( !fun )
{
pszErr = dlerror();
printf("Find symbol failed!%sn", pszErr);
dlclose(pdlHandle);
return NULL;
}
return fun;
}
可是这样为什么报如下错误:
错误: 从类型‘void*’到类型‘void (*)(short int*, short int*, UINT, UINT) {aka void (*)(short int*, short int*, unsigned int, unsigned int)}’的转换无效
调用我封装的这个函数myfun
int *funaddress = myfun(pdlHandle);//得到库中函数地址
于是调用
funaddress(,,,,);//传了四个参数
但是报错说:错误: ‘funaddress’不能用作函数
求解...
于是
int *DataHandle::myfun(void * pdlHandle)
{
pdlHandle = dlopen("./Dynamic_Lib/mylib.so", RTLD_LAZY); // RTLD_LAZY 延迟加载
char *pszErr = dlerror();
if( !pdlHandle || pszErr )
{
printf("Load Dynamic-lib failed!n");
return NULL;
}
void (*fun) (short *, short *, UINT ,UINT ) = dlsym(pdlHandle, "MeetingMixVoice"); // 定位动态链接库中的函数 (即函数指针) //此句报错.....................................
if( !fun )
{
pszErr = dlerror();
printf("Find symbol failed!%sn", pszErr);
dlclose(pdlHandle);
return NULL;
}
return fun;
}
可是这样为什么报如下错误:
错误: 从类型‘void*’到类型‘void (*)(short int*, short int*, UINT, UINT) {aka void (*)(short int*, short int*, unsigned int, unsigned int)}’的转换无效
调用我封装的这个函数myfun
int *funaddress = myfun(pdlHandle);//得到库中函数地址
于是调用
funaddress(,,,,);//传了四个参数
但是报错说:错误: ‘funaddress’不能用作函数
求解...
|
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。