dlopen() 是否设置了 errno?

Does dlopen() set errno?

真的如标题所说。手册页什么也没说。一些 google 报告有人在 dlopen 之后检查 errno,但只有少数人并且结果各不相同。该函数确实 return 一个 success/non-success 值,但是应该如何找出失败的原因。

那么dlopen()设置errno了吗?那么,在哪里定义了不同的 errno 值? 如果不是,应该用什么来检查导致失败的原因?

No(强调已添加)。

Upon successful completion, dlopen() shall return a symbol table handle. If file cannot be found, cannot be opened for reading, is not of an appropriate executable object file format for processing by dlopen(), or if an error occurs during the process of loading file or relocating its symbolic references, dlopen() shall return a null pointer. More detailed diagnostic information shall be available through dlerror().


正如其他人所指出的,没有什么可以禁止 dlopen()(或者更可能是 dlopen() 调用的函数)修改 errno。但是符合标准的 dlopen() 不会通过 errno 报告自己的错误。您需要致电 dlerror().