我写了一个 wrap 函数来替换 printf
的 stdio.h
。我发现 wrap
选项适用于 stdlib.h
中的函数,例如 malloc
或 exit
。但它不适用于 printf
或 fprintf
。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/