ChinaUnix.net
相关文章推荐:

dlsym用法

dlopen() dlsym() 简而言之,共享对象通过dlopen动态打开动态库的加载完成后,返回一个句柄,通过dlsym定位到你需要执行的函数指针然后可以在程序中使用 功能:打开一个动态链接库 包含头文件:#include 函数定义:void * dlopen( const char * pathname, int mode); 函数描述: 在dlopen()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。使用dlclose()来卸载打开的库。 mode是打开方式,其值有...

by 董力云 - Linux环境编程 - 2013-03-27 16:43:21 阅读(1492) 回复(0)

相关讨论

glibc-2.9/dlfcn/dlsym.c 里的 __dlsym 的实现调用了__rtld_lock_lock_recursive(GL(dl_load_lock)); __rtld_lock_lock_recursive是宏,跟到一大坨内嵌汇编 GL把dl_load_lock变成了_dl_load_lock 这里感觉完全看不懂了,而且变量也没找到。

by J_O_H_N - C/C++ - 2011-05-26 09:13:02 阅读(2370) 回复(4)

int dev_func(char dev_func_name[]) { int res; void *handle; int (*func)(); char *error; handle = dlopen(dev_lib_path, RTLD_LAZY); if(!handle) { LOG(m_event, ERROR, "%s\n", dlerror()); return FAIL; } func = dlsym(handle, dev_func_name); if((error = dlerror()) != NULL) { LOG(m_event, ERROR, "%s\n", error); dlclose(handle); ...

by WHITLACK - C/C++ - 2009-02-19 01:01:41 阅读(4667) 回复(2)

[code]#include #include typedef int (*Lancher)(int,char**); typedef void* LibraryHandler; int main(int argc,char* argv[]) { LibraryHandler lib_handler; //linux lib_handler = dlopen("lancher.so",RTLD_LAZY); if(!lib_handler){ printf("unable to load lancher.so:%s\n",dlerror()); return 0; } Lancher entry_point = NULL; entry_point = (L...

by flaght - C/C++ - 2011-01-14 01:57:07 阅读(3368) 回复(3)

把esql/c的代码编进动态库,结果调用dlsym时返回22:"Function not implemented" 明明有这个东西啊

by jchc - C/C++ - 2008-07-02 15:10:26 阅读(2150) 回复(1)

我在.so中有这两个函数: extern "C" { Progress * createInstance() { return new Prog_A; } void destroyInstance(Progress * p) { delete p; } } 然后用Create_t * pfCreate = (Create_t *)dlsym(dp,"createInstance");调用,可是却报函数未实现。这是为什么呢?

by jchc - C/C++ - 2008-09-09 11:41:11 阅读(3521) 回复(11)

使用dlsym可以调用so里面定义的函数,但是我想调用类里面的成员函数怎么办阿? 例如,在so里面有print的函数,我可以使用dlsym(handle,"print")得到这个函数指针, 但是,我定义了class A 里面有个A.print函数,我怎么用dlsym来得到这个函数指针阿?

by sharkconi - C/C++ - 2006-07-19 16:43:42 阅读(2602) 回复(1)

声明了一个如下类型的函数指针 [code]int (*cmd)(arg1,arg2);[/code] 程序我是这样写的: [code] dp=dlopen(...); cmd=dlsym(dp,“cmd”); [/code] 用g++编译返回错误是: [code] invalid conversion from `void*' to `int (*)(arg1, arg2)' [/code] c++里边应该怎么进行这样的转换?

by wmytch - C/C++ - 2005-09-14 14:12:02 阅读(3197) 回复(4)

本帖最后由 testh 于 2012-11-24 15:00 编辑 使用的是alsa-lib-1.0.25,分别编译了x86和arm版本的libasound.so,且在x86上任何运行都正确。 通过分析alsa-lib的源码发现,在snd_pcm_open()内部通过层层调用,在src/dlmisc.c中的snd_dlsym_verify()中有一组dlopen()-->dlsym()的调用,很明显,他们是获取libasound.so本身中可导出的接口的,通过调试发现,使用strace pcm_min 发现段错误就发生在调用dlsym()这个接口里,没有办法再...

by testh - 内核源码 - 2012-11-24 19:18:26 阅读(1635) 回复(2)

动态库中可以利用dlsym函数动态获取函数指针,静态库中能否实现?

by rock_jq - C/C++ - 2010-06-06 22:17:57 阅读(3031) 回复(4)

rt.我的对象定义和实现都在动态库中。通过dlsym调用其中的对象构造方法创建了对象,之后能否就dlclose()并继续使用对象?还是说一直要等对象销毁后才能dlclose()?

by jchc - C/C++ - 2008-10-07 18:33:49 阅读(1580) 回复(1)