1

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

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

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

4

1 回答 1

2

调用 dlcose 后,该句柄不再适用于您的使用:

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

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

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

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

于 2013-11-09T16:22:48.877 回答