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

标签 c makefile

这是一个示例程序,我试图在下面编译这个 c 程序以了解 制作文件。

主.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;
}

倒数.c

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

倒数.h

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

生成文件

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 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): undefined reference toreciprocal' collect2: ld returned 1 exit status make: * [reciprocal] Error 1

请帮助我了解此错误的原因。

最佳答案

更改您的 makefile:

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

或者:

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

关于c - main.c :(. text+0x25): 未定义对 `reciprocal' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030862/

相关文章:

c++ - 具有多个主要功能的循环生成文件

c++ - 如何在 CMake 中使用 PJSIP 库?

opencv - make 和 make -j5 有什么区别?

android - LOCAL_LDLIBS 不起作用,但 LOCAL_LDFLAGS 起作用。为什么?

c++ - 如何将 C++ 代码转换为 C

c - 什么时候使用 short 而不是 int?

c - 我怎样才能读取和处理这种文件

c - 等待信号 (POSIX)

c - C 中的指针何时计算出它引用的内存量?

c++ - 如何使用 Ninja 在 C++ 中编译 "Hello World"?