我的项目有五个文件,三个.c和两个.h,下面是它们的#include结构。
main.c
#include state_machine.h
#include input_stack.h
state_machine.c
#include state_machine.h
#include input_stack.h
input_stack.c
#include input_stack.h
我正在使用有效的gcc -W main.c
命令创建a.out文件。当我开始使用Makefile时,出现multiple definition of ...
错误。
我所有的头文件都具有如下所示的头保护:
#ifndef NAME_H
#define NAME_H
code ...
#endif /* NAME_H */
我也尝试过添加.c文件而不是.h
还根据this question使用了extern方法。
Makefile
CC= gcc
CFLAGS+= -Wall -g
tag : main.o stateMachine.o inputStack.o
cc -o tag main.o stateMachine.o inputStack.o
main.o : main.c
cc -c main.c
stateMachine.o : stateMachine.c stateMachine.h
cc -c stateMachine.c
inputStack.o : inputStack.c inputStack.h
cc -c inputStack.c
clean :
rm tag main.o stateMachine.o inputStack.o
运行make命令后出现错误消息
cc -o tag main.o stateMachine.o inputStack.o
stateMachine.o:(.data.rel.local+0x0): multiple definition of `state'
main.o:(.data.rel+0x0): first defined here
stateMachine.o:(.data+0x0): multiple definition of `state_transitions'
main.o:(.data+0x0): first defined here
inputStack.o:(.data+0x0): multiple definition of `top'
main.o:(.data+0x90): first defined here
collect2: error: ld returned 1 exit status
Makefile:5: recipe for target 'tag' failed
make: *** [tag] Error 1