我将在运行时加载共享库的依赖于操作系统的 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/