dlsym()
列表的man page
*(void **) (&cosine) = dlsym(handle, "cos");
作为转换
dlsym()
返回值的解决方法。*(void **) (&cosine)
在这里是什么意思?我知道cosine
是先前定义的函数指针,但是我不确定为什么在名称前需要一个&符号&
(没有&
的错误)。而且,我不知道为什么void *
(void **
)的指针再次与*
一起使用。 最佳答案
让我们一次打开一下包装:
&cosine
这需要一个指向变量
cosine
的指针,因此它将是一个指向函数指针的指针。(void **) &cosine
我们将指针到函数指针转换为指针到无效指针。
* (void **) &cosine
我们取消引用强制转换的指针,将
dlsym()
的结果分配给它。实际上,正在发生的事情是问题的一个回避步骤。我们没有将
dlsym()
的结果转换为正确类型的函数指针,而是假装cosine
是void *
(通过间接级别)并分配给它。关于c++ - dlsym()解决方法返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43509159/