gpt4 book ai didi

c - gcc 的 wrap 选项对函数 printf 有影响吗?

转载 作者:太空狗 更新时间:2023-10-29 15:21:31 32 4
gpt4 key购买 nike

我写了一个wrap函数来替换stdio.hprintf。我发现 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com