dlsym()列表的man page

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

作为转换dlsym()返回值的解决方法。
*(void **) (&cosine)在这里是什么意思?我知道cosine是先前定义的函数指针,但是我不确定为什么在名称前需要一个&符号&(没有&的错误)。而且,我不知道为什么void *(void **)的指针再次与*一起使用。

最佳答案

让我们一次打开一下包装:

&cosine

这需要一个指向变量cosine的指针,因此它将是一个指向函数指针的指针。
(void **) &cosine

我们将指针到函数指针转换为指针到无效指针。
* (void **) &cosine

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

实际上,正在发生的事情是问题的一个回避步骤。我们没有将dlsym()的结果转换为正确类型的函数指针,而是假装cosinevoid *(通过间接级别)并分配给它。

关于c++ - dlsym()解决方法返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43509159/

10-13 00:06