我是Linux编程新手我试图编译一个简单的测试结构。但是我在编译时遇到错误。添加inc.c(在app:line中)也不起作用。我该如何包含正确的文件?
生成文件:
app: main.c inc.h
cc -o app main.c
终端:
make
cc -o app main.c
/tmp/ccGgdRNy.o: In function `main':
main.c:(.text+0x14): undefined reference to `test'
collect2: error: ld returned 1 exit status
make: *** [app] Error 1
main.c中:
#include <stdio.h>
#include "inc.h"
int main()
{
printf("Kijken of deze **** werkt:\n");
test();
getchar();
return 0;
}
inc.h
#ifndef INCLUDE_H
#define INCLUDE_H
void test();
#endif
inc.c
#include <stdio.h>
void test()
{
printf("Blijkbaar wel!");
}
答案 0 :(得分:11)
您必须通过编译inc.o
链接您获得的编译单元inc.c
。
通常,这意味着您必须提供包含main.c
(传递)中使用的函数的所有目标文件。您可以使用make
的隐式规则编译这些规则,无需指定额外的规则。
你可以说:
app: main.c inc.o inc.h
cc -o app inc.o main.c
make
将自己知道如何从inc.o
汇编inc.c
,但在确定是否 时会考虑inc.h
必须重建inc.o
。为此, 必须指定自己的规则。
答案 1 :(得分:3)
你没有编译inc.c文件
app: main.c inc.h
cc -o app main.c inc.c
答案 2 :(得分:0)
您还需要编译inc.c
。一种合适的方法(更好地扩展到更大的应用程序)将Makefile分成不同的目标。这个想法是:每个目标文件一个目标,然后是最终二进制文件的一个目标。要编译目标文件,请使用-c
参数。
app: main.o inc.o
cc -o app main.o inc.o
main.o: main.c inc.h
cc -c main.c
inc.o: inc.c inc.h
cc -c inc.c