动态库:无法从库中引用应用程序

时间:2014-02-26 09:51:24

标签: c linux gcc ld shared-libraries

我现在需要一些帮助。

简而言之问题:

如何从共享对象(动态库)引用到使用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需要符号来定位函数。

0 个答案:

没有答案