linux 下创建动态链接库的一个很简单的例子
来源:互联网 发布:mysql更新字段值 编辑:程序博客网 时间:2024/06/04 20:37
在目录 /usr/local/src/so_lib_test 下面创建三个文件: libtest.h, libtest.c, test_main.c
libtest.h 的内容为:
执行命令 gcc -o test_main test_main.c -L. -ltest -ldl
在当前目录下会生成一个名为 test_main 的可执行文件
执行命令 ./test_main
会报出错误提示:
error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
这是因为需要告诉操作系统到哪里才能找到 libtest.so 文件,执行命令
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/src/so_lib_test
(除了使用这条命令之外还有其他方法,这里就不介绍了)
再执行命令 ./test_main
可以看到以下输出
dlopen() function load libtest.so succeeded!
Get functino offset address succeeded!
Add(3,7) function output is: 10
dlclose() function close dynamic link library succeeded!
对于 dlopen(), dlsym(), dlclose() 函数的用法,在网页: http://linux.die.net/man/3/dlopen 上有详细介绍
libtest.h 的内容为:
/* 这里只声明了一个函数 */int Add(int, int);libtest.c 的内容为:
#include "libtest.h"int Add(int a, int b){ return ((a)+(b)); }test_main.c 的内容为:
#include <stdio.h>#include <stdlib.h>#include <dlfcn.h>int main(int argc, char **argv){ void *handle; int (*lpAdd)(int, int); char *error; if ( !(handle = dlopen("libtest.so", RTLD_LAZY)) ) { fprintf(stderr, "%s\n", dlerror()); return 1; } else printf("dlopen() function load libtest.so succeeded!\n"); dlerror(); /* Clear any existing error */ *(void **) (&lpAdd) = dlsym(handle, "Add"); if ((error = dlerror()) != NULL) { fprintf(stderr, "%s\n", error); return 1; } else printf("Get functino offset address succeeded!\n"); printf("Add(3,7) function output is: %d\n", (*lpAdd)(3, 7)); if (dlclose(handle)) { error = dlerror(); fprintf(stderr, "%s\n", error); return 1; } else printf("dlclose() function close dynamic link library succeeded!\n"); return 0;}
执行命令 gcc libtest.c -fPIC -shared -o libtest.so
在当前目录下会生成一个名为 libtest.so 的动态库文件。执行命令 gcc -o test_main test_main.c -L. -ltest -ldl
在当前目录下会生成一个名为 test_main 的可执行文件
执行命令 ./test_main
会报出错误提示:
error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
这是因为需要告诉操作系统到哪里才能找到 libtest.so 文件,执行命令
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/src/so_lib_test
(除了使用这条命令之外还有其他方法,这里就不介绍了)
再执行命令 ./test_main
可以看到以下输出
dlopen() function load libtest.so succeeded!
Get functino offset address succeeded!
Add(3,7) function output is: 10
dlclose() function close dynamic link library succeeded!
对于 dlopen(), dlsym(), dlclose() 函数的用法,在网页: http://linux.die.net/man/3/dlopen 上有详细介绍
- linux 下创建动态链接库的一个很简单的例子
- linux 下创建动态链接库的一个很简单的例子
- linux下编译动态链接库的一个小例子
- linux下编译动态链接库的一个小例子
- linux下编译动态链接库的一个小例子
- linux下编译动态链接库的一个小例子
- LINUX下动态链接库的创建
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Android下动态链接库.so调用的简单例子
- Linux下,使用C/C++编写"静态链接库"的一个简单例子
- linux 一个简单的进程创建例子
- Linux下动态链接库的创建和使用
- 《LINUX下动态链接库的创建与应用》
- linux下动态链接库的创建和使用
- Linux下动态链接库的创建和使用
- Linux 下动态链接库的创建与使用
- Linux下动态库的创建与链接
- uboot中nand详细分析(一)
- hibernate one-to-many many-to-one 双向注解
- #号无法正常传输的解决方法
- 设计模式详解(总纲)
- CSS中怎么让DIV居中
- linux 下创建动态链接库的一个很简单的例子
- java 先进先出
- EL表达式笔记
- Android电话Phone UI分析
- JAVA多线程Callable接口的实现
- Android高级进阶之自定义定义控件的属性
- 让你提升命令行效率的Bash快捷键
- python : import module
- ant之修改ant-contrib让foreach支持接收两个参数列表