我正在编译一个由多个项目组成的应用程序,这些项目会生成动态库(LINUX上的共享库)。当然,不同的项目正在链接到我编译的其他项目。我在Ubuntu下使用CodeBlocks 10,使用GCC编译器。递归共享库加载 - 无法打开共享对象文件
原因在于,根据用户指定的参数,不同的库将被加载,在我的主要应用我加载相应的库,根据决定,以下行的事实:
dll = dlopen("my_library.so", RTLD_LAZY);
如文档中所述,dlopen会自动加载库如果库对其他共享库有依赖关系,并且递归完成该过程。
的问题是,我的dlopen之后,我调用dlerror获得(),以了解发生了什么事情,我得到以下错误:
../../../../gccDebug/os.so : Cannot open shared object file: No such file or directory.
只看错误,我完全地了解它,因为它看起来比它应该多于2个文件夹。问题是为什么?
我的意思是:我使用相对路径显式加载项目上的共享库。在我的主应用程序上,工作目录是../../gccDebug。 我使用dlopen,mylibrary.so加载(在项目选项中)../../gccDebug/gui.so。这gui.so然后也明确加载(在项目选项)../../gccDebug/so.os
在我看来,这是发生的,是他追加的路径,使第三次“迭代“,他正在寻找一条已经搜索到太多文件夹的路径。如果第一次递归加载(gui.so)工作得很好,为什么第二次递归加载(so.os)会给出一个奇怪的路径?
使用dlopen函数递归加载共享库有什么问题?
你是什么意思“在项目选项”? – 2013-03-07 14:17:33
代码块构建选项 – filipehd 2013-03-08 08:47:50