c-dlsym()解决方法返回类型

man page的dlsym()列出

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

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

*(void **)(&余弦)在这里是什么意思?我知道余弦是先前定义的函数指针,但我不确定为什么&符为何.名称前需要(没有&的错误).而且,我不知道为什么void *(void **)的指针再次与*一起使用.

解决方法:

让我们一次解开它:

&cosine

这需要一个指向变量余弦的指针,因此它将是一个指向函数指针的指针.

(void **) &cosine

我们将指针到函数指针转换为指针到无效指针.

* (void **) &cosine

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

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

上一篇:OUI作者开源作品


下一篇:c – 使用dlsym的Ansi C补丁在linux下编译OK但在Mac Os X上失败