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

时间:2013-11-09 14:35:15

标签: c winapi dll shared-libraries posix

我在运行时在便携式界面中包装了依赖于操作系统的API加载共享库。

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

我需要这些信息来为我的API用户编写适当的文档,并在C ++界面中提供一些异常保证。

1 个答案:

答案 0 :(得分:2)

一旦你打电话给dlcose,手柄就不再有效了:

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

  

使用dlclose()关闭对象后,应用程序应该假定其符号不再可用于dlsym()。

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

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