加载执行动态库
来源:互联网 发布:sql to_char 用法 编辑:程序博客网 时间:2024/04/30 09:16
void * dlopen(const char* filename, int flag);
打开一个动态库文件,返回一个指针作为句柄handle.失败返回NULL.
flag: RTLD_NOW(RunTime Load Dynamic ):表示立即加载到内存
RTLD_LAZY:表示在使用时才加载.
潜规则:
返回指针的函数一般用正常地址表示成功,NULL表示失败。个别例外返回(void*)0xffffffff表示失败.
char* dlerror(void);取得一个字符串描述动态库操作发生了什么错误。
void * dlsym(void* handle, const char* symbol);查找指定的符号名在动态库中的地址,失败返回NULL,(严格的做法是在dlsym调用前调用dlerror, dlsym之后再调用dlerror()判断后一次的返回值是否非空来判断是否失败。)
int dlclose(void* handle);关闭动态库,从内存中卸载。
头文件:<dlfcn.h>
这些函数在动态库libdl.so中, gcc -ldl
demo:
#include<stdio.h>
#include<dlfcn.h>
int main()
{
printf("select 1 or 2");
int sel = 0;
scanf("%d", &sel);
void * handle;
if( 1== sel)
{
handle = dlopen("./libch.so", RTLD_NOW);
}else{
handle = dlopen("./liben.so", RTLD_NOW);
}
if( NULL == handle )
{
puts( dlerror() );
return -1;
}
void (*fp)(void);
fp = dlsym(handle, "welcom");
if(NULL == fp )
{
puts( dlerror() );
return -1;
}
fp(); // (*fp)();dlclose( handle );
}
//
gcc -shared -o libch.so dlzh.c
gcc -shared -o liben.so dlen.c
- 加载执行动态库
- 动态加载动态库
- 动态加载动态库
- 动态加载EXE文件到内存执行
- 动态加载EXE文件到内存执行
- 动态加载EXE文件到内存执行
- 动态加载JS文件并执行
- 动态加载JS文件并执行
- Java动态编译源代码并加载执行
- linux进程执行未加载动态库报错
- 利用反射动态加载Assembly动态执行类型方法
- 如何将程序的执行文件和静态加载动态库放在不同的目录
- 执行应用程序或者加载动态库时出现: No such file or directory
- linux 动态加载动态库
- linux 动态加载动态库
- CodeBlocks加载动态动态库
- Qt动态加载动态库
- linux 动态加载动态库
- android 图片水平重复平铺(repeat x)
- 距离度量的表示法
- learning Python- types
- 动画演示 Sublime Text3 非常有用的快捷键
- 153 最长递增子序列
- 加载执行动态库
- 编写一个类,用来测试正则表达式,看看它们能否匹配一个输入字符串
- JSON 字符串 与 java 对象的转换
- 154 字符串原地压缩
- C# WinForm下Excel导入导出
- RakNet学习(29) -- Interface 2插件
- 155 字符串匹配实现
- 调用GNU编译器与微软VS编译器
- 1