c - dlclose()/FreeLibrary()失败后句柄的情况

标签 c winapi dll shared-libraries posix

我将在运行时加载共享库的依赖于操作系统的 API 包装在一个可移植的接口(interface)中。

问题是,在记录 close() 函数时,我注意到没有关于 dlclose() 或 FreeLibrary() 函数失败时会发生什么情况的文档。句柄是否仍然可用,因为图书馆无法关闭?或者它处于某种损坏的状态?我还能使用它吗?

我需要此信息来为我的 API 用户编写适当的文档,并在 C++ 接口(interface)中提供一些异常保证。

最佳答案

一旦您调用 dlcose,该句柄就不再对您有效:

http://pubs.opengroup.org/onlinepubs/007904975/functions/dlclose.html

Once an object has been closed using dlclose() an application should assume that its symbols are no longer available to dlsym().

dlclose() 很可能什么都不做。因为其他库也有库的句柄。如果关闭失败,则通常意味着其他人正在使用它。但这并不意味着您可以通过您的 handle 再次使用它(已经死了)。

错误通常表示您的句柄无效。

关于c - dlclose()/FreeLibrary()失败后句柄的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877176/

相关文章:

c - 搜索检查字符串匹配的算法

c - OpenSSL ASN1_TYPE 和 ASN1_ITEM 是如何关联的

c++ - 当程序可见或最小化时进程 ID 发生变化

c# - 网络摄像头、C# 和可靠的包装器

c++ - int* x[n][m] 和 int (*x) [n][m] 有什么区别?

c++ - 如何获取进程相对时间

c++ - 将 LOWORD(wParam) 转换为 const wchar_t*

c++ - CBT Hook 仅接收一些事件

c++ - 在单独的线程中加载库

c - execve args 未复制超出空字节