首页 文章

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

提问于
浏览
0

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

  • 2

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

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

相关问题