Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C DLOPEN模块能否调用调用方中的函数?_C_Dlopen - Fatal编程技术网

C DLOPEN模块能否调用调用方中的函数?

C 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=

假设我有一个父母和一个孩子,孩子用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=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比我快了几秒钟:)