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 に答える