2013-02-20 144 views
0

Im在C++程序中使用dlopen()函数加载共享库。如何检查共享库已成功加载或未使用dlopen加载?

那么如何检查它是否成功加载或不? 或者我们可以使用该库中存在的任何函数的名称改变来检查该库的加载吗?

+0

dlopen函数在出错时返回NULL,是你在找什么?有关更详细的解释,请参阅dlopen的联机帮助页。 – SeedmanJ 2013-02-20 13:12:32

回答

1

manual page

如果dlopen()的由于某种原因失败,则返回NULL。


dlsym功能无法处理的C++标识符,除非他们已经宣布extern "C",或者你使用重整名称。

1

如果未成功加载,则dlopen()返回NULL。

对dlopen的手册页()说:

返回值

如果无法找到文件,无法打开阅读,不是通过一个合适的对象 格式处理dlopen(),或者在加载文件或重定位其符号引用的过程中发生错误时,dlopen()应返回NULL。 更详细的诊断信息应通过dlerror()提供。

0

根据文档(http://linux.die.net/man/3/dlopen),dlopen在任何失败时返回NULL。所以你可以检查并完成。但如果出于某种原因,您不相信图书馆是一个“好”的图书馆,您可以为您的系统定义自己的约定。例如,您可能要求系统加载的任何库都定义了一个具有特定名称的符号,该符号具有某些特定属性,直至包括您可以分配给想要编写兼容库的用户的“API密钥”之类的内容。

0

如果dlopen遇到错误,则返回NULL,并且dlerror将返回相应的错误消息。

0

如果每个人提到如果dlopen()失败,你会得到一个null,但是如果你试图解决为什么你变得神秘null,即使库存在你指定的路径,可能确保所有库都存在于系统上这就是“特定的库”所依赖的,否则调用将失败,NULL;)

去使用extern“C”在你的.cpp文件中的函数,所以编译器不要破坏它,你可以调用它一次库被加载。