假设我有一个 parent 和一个 child , child 用 dlopen 调用 child 中的函数“hello”。那么子级可以调用父级中的函数“world”吗?我不断收到符号查找错误:./child.so: undefined symbol :世界
这是文件。父级.c
#include <dlfcn.h>
typedef void (*fptr)();
#include <stdio.h>
int main () {
void*handle=dlopen("./child.so",RTLD_LAZY);
fptr f=dlsym(handle,"hello");
f();
return 0;
}
void world() {
printf ("world");
}
和child.c
#include <stdio.h>
void hello () {
printf ("hello");
world();
}
最佳答案
是的,dlopen
模块可以从调用程序调用函数,前提是调用程序已与 -rdynamic
选项链接。
顺便说一句,大多数插件都需要该功能:firefox 插件显然想要调用 firefox 函数。
另请阅读 visibility功能__attribute__
...另请阅读 Drepper's How to Write Shared Libraries长纸和dlopen(3)手册页。
关于dlopened 模块可以调用调用者中的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765526/