我正在制作一个makefile的问题。我的makefile看起来像这样
bag: main.o bow.o
gcc bow.o main.o -o bag
main.o: main.c bow.h
gcc -Wall -ansi -pedantic main.c -o main.o
bow.o: bow.c bow.h
gcc -Wall -ansi -pedantic -c bow.c -o -bow.o
我还有一个名为“bow.h”的头文件,用于bow.o和main.o. bow.h由8个函数定义和2个结构组成,bow.c包含8个函数和NO MAIN文件。 main.c被认为是一个最小的主文件,所以它只包含
#include "bow.h"
当我使用
在终端中运行makefile时make
我收到此消息
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
makefile:2: recipe for target 'bag' failed
make: *** [bag] Error 1
这究竟是什么意思,它是如何造成的,我该如何解决?
答案 0 :(得分:2)
即使是最小程序(可执行文件)也需要一个起点。对于C程序,这是main()
函数。因此,链接器寻找该函数(更准确地说,它链接启动对象,main
是一个未解析的符号),找不到它,并发出错误。
因此,您必须提供main()
。或者,您可能不会生成可执行文件而是库。