错误 - “(。text + 0x0):'method'的多重定义”(C程序)

时间:2011-12-20 06:17:16

标签: c makefile

我目前有2个C程序和1个头文件,我必须在Makefile中制作。我是新手将程序编译成Makefile,但我知道基础知识。我输入:

cc -c file1.c

cc -c file2.c

cc file1.o file2.o

-----我收到以下错误-----

file2.o: In function 'method':

file2.c:(.text+0x0): multiple definition of 'method'

file1.o:file1.c:(.text+0x0): first defined here

collect2: ld returned 1 exit status

有什么问题?我听到了各种各样的事情,比如因为它们共享相同的头文件(头文件中定义了'方法'),编译器认为它们有两个。我不知道。你们觉得怎么样?

谢谢,

编辑: 感谢您的回复。如果'method'是“struct”函数怎么办?将它移到其他地方仍然是个好主意吗?我刚尝试过,现在我得到了一个“解除指向不完整类型的指针”。

5 个答案:

答案 0 :(得分:3)

  

'method'在头文件中定义。

你不应该这样做。如果你这样做,函数定义将进入包含导致链接错误的标题的所有文件,因为将有多个版本的方法。

您只需要 声明 头文件中的方法。 .c文件中定义 ,编译它并将其链接到调用此函数的目标文件。

答案 1 :(得分:1)

如果method是头文件中定义的小函数,则应将其声明为static inline,例如像

/// in header.h
static inline int sum(int x, int y) { return x+y; }

答案 2 :(得分:1)

像这样制作你的头文件(ifndef是为了确保它不会被包含多次):

#ifndef MYHEADER_H_
#define MYHEADER_H_

extern void mymethod1(void); // only put declaration in headers
extern void mymethod2(void);
... other stuff

#endif

答案 3 :(得分:0)

你在file2.c和file1.c中都有方法的定义。 尝试仅将声明放在公共头文件中,并将定义移动到只有一个c文件。

答案 4 :(得分:0)

将函数声明为静态函数。