我现在需要一些帮助。
如何从共享对象(动态库)引用到使用dlopen
动态加载库的应用程序?
我在Linux下用C开发。虽然构建了一个带有动态可加载库的插件系统,我需要一个功能,我会回调引用(可能就是问题:我不知道要搜索什么) 。我的意思是后面的参考如下:
假设有两个“模块”:main_app.c(主应用程序)
/* main_app.c */
int main(void){
void *dl_handle;
/* load DL and symbols */
dl_handle = dlopen("dyn_lib", RTLD_NOW);
}
void should_be_called_from_library(void){
// DO SOMETHING USEFULL
}
和dyn_lib.c(DL)
/* dyn_lib.c */
#include main_app.h
/* anywhere in the DL: call a function from the main application */
should_be_called_from_library(void);
/* .... */
所以我想做的是从动态加载的库中调用主应用程序中的符号。 其他一切正常,但如果我尝试调用该函数(或解决任何其他符号),则无法加载该库。
export
C代码中的符号也无济于事,所以我认为在main_app.c
的构建过程中问题出在链接器上。因为dyn_lib.c
需要符号来定位函数。