用于加载共享对象的dlopen用法的默认路径

时间:2014-09-16 11:04:46

标签: c dll solaris shared-objects

尝试通过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";

没有问题。 默认情况如何,即如果我省略./?

1 个答案:

答案 0 :(得分:0)

我已经得到了上述查询的答案,并为每个其他人的帮助发布了答案。 LD_LIBRARY_PATH应定义为。 (当前目录)(如果尚未设置)为:

 export LD_LIBRARY_PATH=.