我目前有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”函数怎么办?将它移到其他地方仍然是个好主意吗?我刚尝试过,现在我得到了一个“解除指向不完整类型的指针”。
答案 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)
将函数声明为静态函数。