ChinaUnix.net
相关文章推荐:

dlsym dlopen

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)

相关讨论

学习使用dlopen等函数动态加载函数,测试程序如下: #include #include #include int usage() { return 1; } int main() { void* handle,*p; char * error; handle = dlopen(NULL,RTLD_NOW); if (!handle) { fputs (dlerror(), stderr); exit(1); } p = dlsym(handle, "usage"); if ((error = dlerror()) != NULL) { fputs(error, stderr); exit(1); } } 运行后,dlsym的...

by sharevon - C/C++ - 2011-05-25 23:46:11 阅读(23904) 回复(13)

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)

关于函数的介绍,概念性的东东,自己看man [root@kenthy study]# cat dlopen.c #include stdio.h> #include stdlib.h> #include dlfcn.h> int main(int argc, char **argv) { void *handle; double (*cosine)(double); char *error; handle = dlopen ("libm.so", RTLD_LAZY); if (!handle) { fprintf (stderr, "%s\n", dlerror()); exit(1); } dlerror(); /* Clear any existing error ...

by ubuntuer - Linux文档专区 - 2009-09-10 17:00:44 阅读(2093) 回复(0)

我的程序大体框架是这样的: 我把dll.cpp用-shared选项编译成dll.so,在dll.cpp当中引用了静态库libA.a当中的符号。然后dll.so是在main当中用dlopen打开的。 编译和链接都没有问题,但是在运行的时候会报如下的错误: ./dll.so: undefined symbol: _ZN1AC1EiSegmentation fault 所以我猜想可能是我在动态库中引用了静态库中的符号的缘故(参见Makefile中g++ -shared -L. -lA -o dll.so dll.cpp)。 请大家帮我看看怎么办呢? 应...

by tjsailor - C/C++ - 2008-07-19 13:51:45 阅读(8243) 回复(19)

dlopen返回NULL dlerror返回字符串为 [code] 0509-022 Cannot load test.so. 0509-103 The module has an invalid magic number.] [/code]

by unicorns - C/C++ - 2005-04-08 10:04:14 阅读(4493) 回复(4)

如何用g++ 生成一个动态库,可以被dlopen调用? 用g++生成使用dlopen的可执行文件用什么选项?? 能否讲一下共享库和动态库的区别? (创建时的区别?使用方式上的区别?效率上的区别和不同的使用范围?) 谢谢!!!!

by lc1999 - C/C++ - 2004-08-27 11:13:10 阅读(691) 回复(1)

[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)

都知道dlopen可以用来显式加载.so,但是我有个疑惑 加载程序时,系统自带的动态链接器不会先去查找并加载这个.so吗? 如果动态链接器找不到会报错的阿? 是什么原因,导致动态链接器不去查找并加载,而等到程序运行到特定dlopen时才去加载呢?

by seufy88 - Linux环境编程 - 2014-07-03 16:54:47 阅读(793) 回复(3)