一、GCC 动态库处理
- ldd XX ###编译通过,但运行时发现不了动态库
编译时的路径: -L 库路径
二进制可执行程序: -Wl -rpath=目录
- 动态调用
typedef int func_m(void); //定义函数类型,即要在动态库中获取的--函数名。
static int sys_libso_operation(char * libso_name, char * function_name)
{
void *handle;
char *error;
//打开动态库句柄
handle = dlopen(libso_name,RTLD_NOW);
if (!handle) {
printf("!!!!!!!![%s]\n", dlerror());
return 0;
}
//获取动态库中函数的-----函数指针
func_m * func = dlsym(handle,function_name));
if ((error = dlerror()) != NULL) {
printf("!!!!!!!![%s]\n", dlerror());
return 0;
}
//通过函数指针运行函数
func();
//关闭动态库句柄
dlclose(handle);
return 0;
}
gcc -fPIC -shared XX.c -o libxxx.so
二.volatile