dlsym() 解决方法返回类型

dlsym() workaround return type

本文关键字:方法 返回类型 解决 dlsym      更新时间:2023-10-16

dlsym()列表的手册页

*(void **) (&cosine) = dlsym(handle, "cos");

作为强制转换dlsym()的返回值的解决方法。

这里*(void **) (&cosine)的含义是什么?我知道cosine是之前定义的函数指针,但我不确定为什么在名称之前需要&号(没有&的错误)。此外,我不明白为什么void *(void **)的指针再次与*一起使用。

让我们一次解开一下:

&cosine

这需要一个指向变量cosine的指针,所以这将是一个指向函数指针的指针。

(void **) &cosine

我们将指针到函数指针转换为指针到指针到空。

* (void **) &cosine

我们取消引用强制转换的指针,将dlsym()的结果分配给它。

实际上,正在发生的事情只是问题的旁敲侧击。 我们不是将dlsym()的结果强制转换为正确类型的函数指针,而是假装cosine是一个void *(通过间接级别)并分配给它。