首页 文章

main.c :( . text 0x25):未定义引用`reciprocal'

提问于
浏览
0

这是一个示例程序,我试图编译下面的c程序,以了解make文件 .

main.c

#include<stdio.h>
#include "reciprocal.h"
int main(int argc,char **argv){
 int i;
 i=atoi(argv[1]);
 printf("The Reciprocal of %d is %f\n ",i,reciprocal(i));
 return 0;
}

reciprocal.c

#include<stdio.h>
#include<assert.h>
#include "reciprocal.h"
double reciprocal(int i){
assert(i!=0);
return 1.0/i;
}

reciprocal.h

#include<stdio.h>
#ifdef __cplusplus 
extern "C"{
#endif
extern double reciprocal(int i);
#ifdef __cplusplus
}   
#endif

makefile

CFLAGS:=-o2
reciprocal: reciprocal.o main.o
        gcc $(CFLAGS) -o reciprocal.o main.o
main.o: main.c reciprocal.h
        gcc $(CFLAGS) -c main.c -I ../include 
reciprocal.o: reciprocal.c reciprocal.h
        gcc $(CFLAGS) -c reciprocal.c -I ../include 
clean: 
        rm -f *.o reciprocal

当编译如下时,它会抛出一个错误 .

%make

gcc -o2 -c reciprocal.c -I ../include gcc -o2 -c main.c -I ../include gcc -o2 -o reciprocal.o main.o main.o:in function main':main .c :( . text 0x25):未定义引用toreciprocal'colle2:ld返回1退出状态make:* [reciprocal]错误1

请帮我理解这个错误的原因是什么 .

2 回答

  • 3

    更改你的makefile:

    reciprocal: reciprocal.o main.o
            gcc $(CFLAGS) -o reciprocal reciprocal.o main.o
                             ^^^^^^^^^^
    

    或者:

    reciprocal: reciprocal.o main.o
            gcc $(CFLAGS) -o $@ $^
    
  • 3

    你有一个阴险的拼写错误:

    CFLAGS:=-o2
    

    那应该是 -O2 ,带有一个大写 O ,这样你就可以将每个编译的输出重定向到文件 2 .

相关问题