我会对任何我遇到的链接器和编译器问题有任何见解
我有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/