我试图用C编写一个15个汇编函数的汇编器。 一路走来,我在编译时遇到了奇怪的错误,我似乎无法理解如何摆脱它。 这些错误不是在编译时从.c或.h文件发送的,而是从.o文件发送的。我使用一个makefile来编译程序,创建了所有.o文件,但发送了某些错误:
在assemblerBasics.h文件中,我声明了一些有用的变量,例如:
/* Counters: */ int dataCount; int instructionCount; int currentInstructionCount; int entriesCount; int symbolCount; int externalCount; int externalArrCount;
/* Utilities */ int lineNum; int errorFound; int passNum;
在编译时,我得到了每个整数的错误消息,例如: assembler.o :(。bss + 0x0):dataCount的多个定义 main.o :(。bss + 0x0):首先在这里定义
在assembler.c文件中,我将导入assemblerBasics.h文件,在主文件中,我将导入assemblerBasics.h文件和assembler.h文件,但是这些变量不在assembler.h文件中。
assembler.h文件仅包含以下一行:
void Assemble(char* new_line);
因此,在程序中的任何地方,我对这些变量的定义都不会超过一个。 Makefile的编写方式如下:
all: main
main: main.o assembler.o parsing.o assemblerBasics.o HelperMethods.o fileUsage.o utils.o print.o
gcc -ansi -Wall -pedantic -o main main.o assembler.o parsing.o assemblerBasics.o HelperMethods.o fileUsage.o utils.o print.o
assemblerBasics.o: assemblerBasics.c assemblerBasics.h HelperMethods.h fileUsage.h print.h
gcc -ansi -Wall -pedantic -c assemblerBasics.c
assembler.o: assembler.c assembler.h assemblerBasics.h assembler.h HelperMethods.h fileUsage.h print.h
gcc -ansi -Wall -pedantic -c assembler.c
main.o: main.c assembler.h
当我在整个程序中只声明一次每个变量时,为什么为什么要从目标文件中得到这些错误以重复声明呢?而且我也不会两次导入它们...