23,118
社区成员
发帖
与我相关
我的任务
分享
可以正常用,.so里的函数和你的程序里函数重名是无所谓的,只会调用到你程序里的函数.
一般是把.so动态加载的,直接去对应的库里找对应的函数,毕竟只是个工具,不用想的太深。
#include <dlfcn.h>
void *dlopen(const char *filename, int flag);
char *dlerror(void);
void *dlsym(void *handle, const char *symbol);
int dlclose(void *handle);
Link with -ldl.
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main()
{
void (*ptr_func)() = NULL;
void *handle = NULL;
if ((handle = dlopen("libmain.so", RTLD_LAZY)) == NULL)
{
return 1;
}
dlerror();
if ((ptr_func = (void (*)())dlsym(handle, "test")) == NULL)
{
const char *err;
err = dlerror();
if (err != NULL)
{
printf("error:%s\n", err);
}
return 2;
}
ptr_func();
dlclose(handle);
return 0;
}