链接c中的2个目标文件以创建可执行文件

时间:2018-01-30 07:44:24

标签: c makefile object-files

我正在制作一个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

这究竟是什么意思,它是如何造成的,我该如何解决?

1 个答案:

答案 0 :(得分:2)

即使是最小程序(可执行文件)也需要一个起点。对于C程序,这是main()函数。因此,链接器寻找该函数(更准确地说,它链接启动对象,main是一个未解析的符号),找不到它,并发出错误。

因此,您必须提供main()。或者,您可能不会生成可执行文件而是库。