被调用的对象不是函数或函数指针

我有以下代码。

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吗?

getpidType已经是一个指针了,所以放下*

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

(更好的是,放弃明确的演员:

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

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