C对象文件中的多个定义和未定义引用?

时间:2019-03-08 19:11:23

标签: c linux makefile compiler-errors object-files

我试图用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

当我在整个程序中只声明一次每个变量时,为什么为什么要从目标文件中得到这些错误以重复声明呢?而且我也不会两次导入它们...

0 个答案:

没有答案