我写了一个包裹函数来代替printf的stdio.h.我发现该wrap选项适用于函数stdlib.h,例如malloc或exit.但它没有起作用printf或fprintf.
该选项是否wrap对函数产生影响stdio.h?我怎么能包装一个任意函数?我无法从ld文档中获得有用的指导.
这是代码:
//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;
}
Run Code Online (Sandbox Code Playgroud)
如果您希望它正常工作fprintf,您还需要将标志添加-fno-builtin-fprintf到命令行.否则,gcc将优化调用to fprintf而不是调用fwrite,并且链接器将不会看到调用fprintfto wrap.
通常,要正确包装任何函数,您可能还需要相应的-fno-builtin-选项.