gpt4 book ai didi

c - dlopen 使用加载共享对象的默认路径

转载 作者:行者123 更新时间:2023-11-30 17:28:54 26 4
gpt4 key购买 nike

尝试通过 dlopen 加载模块(共享对象)时,加载失败。

比如说,我的 testshobj.c 具有以下内容:

// testobj.c

int dummy() {
return 5;
}

现在,我通过 g++ 编译器将 testobj.c 编译并链接为名为 testshobj.pm 的共享对象:

g++ testshobj.c -G -o testshobj.pm

现在,我有如下 testdlopen.c:

#include <iostream>
using namespace std;
#include <dlfcn.h>
int main(int argc, char **argv) {
const char *modname = "testshobj.pm";
void *handle = dlopen(modname,RTLD_LAZY);
if(!handle) {
cout << "can't load module: " << modname << ": " << dlerror() << endl;
return(1);
}
return 0;
}

但是,它说无法加载模块:testshobj.pm:ld.so.1:testdlopen:致命:testshobj.pm:打开失败:没有这样的文件或目录

我的问题:dlopen调用的默认路径是什么?如果我使用

const char *modname = "./testshobj.pm";

而不是

const char *modname = "testshobj.pm";

没问题。默认值怎么样,即如果我省略 ./?

最佳答案

我已经得到了上述问题的答案,发布答案以寻求其他人的帮助。LD_LIBRARY_PATH 应定义为 . (当前目录)(如果尚未设置)为:

 export LD_LIBRARY_PATH=.

关于c - dlopen 使用加载共享对象的默认路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25867111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com