3

我有以下代码。

typedef pid_t (*getpidType)(void);

pid_t getpid(void)
{
    printf("Hello, getpid!\n");
    getpidType* f = (getpidType*)dlsym(RTLD_NEXT, "getpid");
    return f(); // <-- Problem here
}

编译器抱怨called object ‘f’ is not a function. 这里发生了什么?我没有以正确的方式声明和使用函数指针f吗?

4

1 回答 1

9

getpidType已经是一个指针,所以删除*

getpidType f = (getpidType)dlsym(RTLD_NEXT, "getpid");

(更好的是,也删除显式强制转换:

getpidType f = dlsym(RTLD_NEXT, "getpid");

由于dlsym返回void*并且void*可以隐式转换为任何其他指针类型,因此不需要强制转换。它甚至可能隐藏错误。)

于 2012-05-22T13:14:35.853 回答