未定义的referance函数包含在头文件中

时间:2016-08-18 16:52:28

标签: c compilation header

我会对我有的几个链接器和编译器问题提出任何见解

我有main.c文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "assemble.h"

char *fileName;
FILE *file;

int main(int argc, char *argv[]){

char inputFile[MAX_INPUT];
int i, flag = TRUE;

for(i=1; i<argc; i++){
    fileName = argv[i];
    strcpy(inputFile,argv[i]);
    file = fopen(inputFile,"r");
    }
        flag = assemble(file, fileName); //****this is the problam line****
        if(!flag)
            printf("Errors found, compilation aborted\n");
        else
            printf("File %s compiled\n", fileName);
        fclose(file);

return 0;
}

在标题assemble.h中,我有一个decleration:

int assemble(FILE *file, char *fileName);

第一个问题是在main.c中我得到未定义的referance为'assemble',id返回1退出状态

第二个问题是在assemble.h中我得到的FILE没有在这个范围内声明。

有谁知道导致这些错误的原因以及解决方法是什么? 提前致谢

[编辑]:makefile。

assembler: main.o assemble.o functions.o 
    gcc -Wall -ansi -pedantic main.o assemble.o functions.o -o assembler -lm

main.o: main.c assemble.c
    gcc -Wall -ansi -pedantic -c main.c assemble.c -lm

assemble.o: assemble.c
    gcc -Wall -ansi -pedantic -c assemble.c -lm

functions.o: functions.c
    gcc -Wall -ansi -pedantic -c functions.c -lm

clean:
    rm -f assembler
    rm -f *.o

1 个答案:

答案 0 :(得分:1)

您需要编译这两个文件并将它们链接在一起。

gcc main.c assemble.c

或者将它们单独编译为目标文件并链接它们。

gcc -c main.c
gcc -c assemble.c
gcc main.o assemble.o