C DLOPEN模块能否调用调用方中的函数?
假设我有一个父母和一个孩子,孩子用dlopen调用孩子中的函数“hello”。然后,子对象能否在父对象中调用函数“world”?我一直收到符号查找错误:./child.so:未定义符号:world 这是文件。父.cC DLOPEN模块能否调用调用方中的函数?,c,dlopen,C,Dlopen,假设我有一个父母和一个孩子,孩子用dlopen调用孩子中的函数“hello”。然后,子对象能否在父对象中调用函数“world”?我一直收到符号查找错误:./child.so:未定义符号:world 这是文件。父.c #include <dlfcn.h> typedef void (*fptr)(); #include <stdio.h> int main () { void*handle=dlopen("./child.so",RTLD_LAZY); fptr f=
#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");
}
#包括
类型定义无效(*fptr)();
#包括
int main(){
void*handle=dlopen(“./child.so”,RTLD\u LAZY);
fptr f=dlsym(手柄,“你好”);
f();
返回0;
}
虚空世界(){
printf(“世界”);
}
和儿童
#include <stdio.h>
void hello () {
printf ("hello");
world();
}
#包括
无效你好(){
printf(“你好”);
世界();
}
是的,如果调用程序与-rdynamic
选项链接,则dlopen
-ed模块可以从调用程序调用函数
顺便说一句,大多数插件都需要这个功能:firefox插件显然想要调用firefox函数
还可以阅读有关函数。。。还可以阅读长篇论文和手册页。我在谷歌上找到了答案
gcc-rdynamic hello.c-ldl令人惊讶的是,它可以。我亲眼目睹了这一切
您可能需要使用
-rdynamic
链接到可执行文件,tovarish Starynkevitch比我快了几秒钟:)