在C中包装函数时未定义的引用

时间:2019-05-19 14:11:06

标签: c

我尝试通过错误处理制作自己的fopen函数,但我想使函数名称与原始名称相同。

main.c
#include "xalloc.h"

int main(){
    fopen("abc","r");
}
打开文件
#ifndef FOPEN_H
#define FOPEN_H

#include <stdio.h>

FILE*
__real_fopen(const char* filename,const char* mode);

#endif
打开文件
#include "xalloc.h"
#include <stdio.h>
#include <stdlib.h>

void
check_ptr(void* ptr,size_t size){
    if(ptr==NULL){
        fprintf(stderr,"Fatal: failed to allocate %zu bytes\n",size);
        abort();
    }
}
FILE*
__wrap_fopen(const char* filename,const char* mode){
    FILE* ptr=__real_fopen(filename,mode);
    if(ptr==NULL){
        fprintf(stderr,"Fatal: failed to open file \"%s\" with mode \"%s\"\n",filename,mode);
        abort();
    }
    return ptr;
}

然后我要用

编译代码
gcc -c fopen.c -Wl,--wrap=fopen
gcc -c main.c
gcc main.o fopen.o

我遇到undefined reference to __real_fopen错误。

0 个答案:

没有答案