【发布时间】:2014-09-30 22:19:46
【问题描述】:
来自 Windows,我习惯于在获得指向符号的指针后关闭 DLL 的句柄。使用 dl 函数时是否相同?在下面的示例中,调用 dlclose 后我仍然可以使用 myFunction 吗?如果没有,调用 dlclose 是否重要?
void* handle = dlopen ("someLibrary", 0);
if (handle)
{
myFunction = dlsym (handle, "MyFunction");
dlclose (handle);
}
【问题讨论】:
-
可以,只要你不打算打电话给
myFunction... -
使用 dl 函数时也是这样吗? 是的,LoadLibrary()/FreeLibrary() 具有相同的语义,您很幸运没有遇到未映射的库后果。
-
你说得很好,我认为我不受影响的唯一原因是因为我使用的库是常见的(即 kernel32 等)。
-
是的,当然,如果应用程序已经在使用共享库/DLL,它仍然会保持打开状态——毕竟每个进程中只有一个共享库的实际副本[至少没有让操作系统多次加载它需要做很多工作]
-
是的,在 osx 库中使用 dispatch_once 使得 dlclose 成为不可能。但我敢肯定没有人会关心,因为它是 ApplicationServices。