func_ptr get_function_address(char* func_name) {
// 获取当前进程中的函数地址
void * handle = dlopen (NULL, RTLD_LAZY | RTLD_LOCAL);
void (*foop) (void*);
if (handle == NULL)
{
printf ("dlopen [local] (NULL): %s\n", dlerror ());
dlclose(handle);
return NULL;
}
/* Make sure we can get at the previously loaded module's symbols
via this handle too. */
foop = dlsym (handle, func_name);
if (foop == NULL)
{
printf ("dlsym [local] (foo): %s\n", dlerror ());
dlclose(handle);
return NULL;
}
dlclose(handle);
return foop;
}
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 编译通过,但使用时,获取到的函数指针为NULL;
nm -g可以查找到该函数。
解决:gcc编译时加上 -rdynamic选项