我写了一个 wrap 函数来替换 printfstdio.h 。我发现 wrap 选项适用于 stdlib.h 中的函数,例如 mallocexit 。但它不适用于 printffprintf
wrap 选项对 stdio.h 中的函数有影响吗?以及如何包装任意函数?我无法从 ld document 获得有用的指南。

这是代码:

//gcc wrap.c -g -Wl,--wrap,fprintf
int __real_fprintf(FILE *stream, const char *format, ...);

int main(){
    fprintf(stderr, "MAIN!\n");
    return 0;
}

int __wrap_fprintf(FILE *stream, const char *format, ...){
    __real_fprintf(stderr, "WRAP!\n");
    return 0;
}

最佳答案

如果您希望这对 fprintf 正常工作,您还需要将标志 -fno-builtin-fprintf 添加到命令行。否则,gcc 将优化对 fprintf 的调用以改为调用 fwrite ,并且链接器不会看到对 fprintf 的调用进行包装。

通常,要正确包装任何函数,您可能还需要相应的 -fno-builtin- 选项。

关于c - gcc wrap 选项对函数 printf 有影响吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39189057/

10-15 17:20