main.c :(. text + 0x25): неопределенная ссылка на взаимность - PullRequest
0 голосов
/ 27 января 2012

Это пример программы, которую я пытался скомпилировать ниже, чтобы узнать о сделать файл.

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

при компиляции, как показано ниже, выдает ошибку.

% составляют

gcc -o2 -c recrocal.c -I ../include gcc -o2 -c main.c -I ../include gcc -o2 -o recrocal.o main.o main.o: в функции main': main.c:(.text+0x25): undefined reference to взаимный 'collect2: ld возвращено 1 состояние выхода make: * [взаимный] Ошибка 1

Пожалуйста, помогите мне понять причину этой ошибки.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

У вас есть коварная опечатка:

CFLAGS:=-o2

Это должно было быть -O2 с большой буквы O, таким образом вы перенаправляете вывод каждой компиляции в файл 2.

3 голосов
/ 27 января 2012

Измените свой make-файл:

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

В качестве альтернативы:

reciprocal: reciprocal.o main.o
        gcc $(CFLAGS) -o $@ $^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...