linux dlopen .so路径,C ++ Linux:dlopen找不到.so库

重新措词的问题(尽管已经解决):

我一直在使用dlopen(3)在Linux上加载共享对象库时遇到麻烦。该库是我构建的库系统的一部分,所有库在运行时都由中央可执行文件加载。所有这些都在Code

::

Blocks中组织到一个工作区中,每个项目在名为Source的目录中都有自己的文件夹,该目录随程序一起提供。可执行文件的生成目录是从其自身的源代码向后的两个目录,因此exectuable和Source文件夹位于同一目录中。这些库也与可执行文件存储在同一目录中,因此我自然地传递了库的名称我正在尝试如图所示打开:

int main(int argc, char** argv) {

void* hLibrary = dlopen("libLibrary.so", RTLD_NOW | RTLD_GLOBAL);

if(hLibrary == NULL) {

fprintf(stderr, "%s\n", dlerror());

return 1;

}

return 0;

}

当构建目录与源代码相同时,这是可行的,直到我将源代码的目录更改为上述安排。此时的问题是,即使文件明显存在且与可执行文件位于同一目录中,dlerror()也会返回“无法打开libLibrary.so:没有此类文件或目录”。然后,我尝试传递“

/libLibrary.so”,因为根据dlopen(3)的手册页,添加/表示相对目录。这返回了相同的错误。

解决方案是需要一个“ ./”-“。”。表示可执行文件的工作目录-需要在Code ::

Blocks中将工作目录更改为要生成可执行文件的位置。以下内容非常适用:

void* hLibrary = dlopen("./libLibrary.so", RTLD_NOW | RTLD_GLOBAL);

这实际上并没有显示完整的解决方案,但是以下内容基本上与我正在做的事情等效:

void* hLibrary = dlopen("./../../libLibrary.so", RTLD_NOW | RTLD_GLOBAL);

希望这可以更好地解释这种情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值