我会对任何我遇到的链接器和编译器问题有任何见解

我有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中,我有一个小问题:

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


第一个问题在main.c中,我未定义引用“ 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

最佳答案

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

gcc main.c assemble.c


或者将它们分别编译为目标文件并进行链接。

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

关于c - 对 header 中包含的函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39023639/

10-10 02:30