dlopen的作品,但dlsym没有

我使用下面的代码片段在Linux上加载一个so库:

 handle = dlopen("myLib.so", RTLD_LAZY); if(handle == NULL) { throw std::runtime_error("unable to load myLib.so"); } 

进一步下来,然后尝试访问一个方法如下:

 getter = dlsym(handle, "getMethod"); if(getter == 0) { std::ostringstream msg; msg << "missing entry point " << dlerror(); throw std::runtime_error(msg.str().c_str()); } 

运行这个时,在dlopen阶段没有exception,但是我不断收到错误:

missing entry point undefined symbol: getMethod

myLib.so上运行nm显示getMethod

 > nm myLib.so | grep get 0000000000024220 T getMethod 

我想和我也使用该方法extern "C"

UPDATE

我现在怀疑,尽pipe句柄的NULL检查不会导致exception,但是句柄本身可能存在问题。

有没有反正我可以执行任何进一步的检查,而不仅仅是== NULL,以确认调用的dlopen是成功的?

一种可能是有一些失败的依赖关系,并且RTLD_LAZY掩盖了这一点。 尝试使用RTLD_NOW来查看是否仍可以dlopen()共享对象。