尝试通过dlopen加载模块(共享对象)时,无法加载。
说,我有testshobj.c有以下内容:
// testobj.c
int dummy() {
return 5;
}
现在,我编译并链接testobj.c作为名为testshobj.pm的共享对象通过g ++编译器:
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:fatal:testshobj.pm:open failed:没有这样的文件或目录
我的问:dlopen调用的默认路径是什么? 如果我使用
const char *modname = "./testshobj.pm";
而不是
const char *modname = "testshobj.pm";
没有问题。 默认情况如何,即如果我省略./?
答案 0 :(得分:0)
我已经得到了上述查询的答案,并为每个其他人的帮助发布了答案。 LD_LIBRARY_PATH应定义为。 (当前目录)(如果尚未设置)为:
export LD_LIBRARY_PATH=.