使用gcc编译时出现 :(.text+0x20):对‘main’未定义的引用
错误显示
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: error: ld returned 1 exit status
解决办法
刚开始在CSDN搜索了很多方法,对我的错误都没有解决的效果,直到后来我发现有可能是我代码写错的原因,并不是!!main()函数没写或者是写错的原因!
我的过程
我写了3个文件:hello1.c hello2.c hello2.h 其内容如下:
查看文件内容命令:
cat hello1.c hello2.c hello2.h
显示:
我发现这写的代码和之前写的不太一样:#include <stdio.h>应该放在.h文件上。
于是,修改为:
这样比较简洁一点,其实两种都可以的,刚刚试了一遍。
我的错误是因为:
我写把gcc 的 "-c -o: 写成大写了, 应该是小写的。
其次,我是使用 makefile 编译的。
makefile内容:
输入命令:make
,显示:
输入运行命令:./hello
,显示:
make、Makefile 小知识
什么是make?什么是Makefile?其主要作用是什么?默认情况下,GNU make 工具在当前工作目录按什么顺序搜索makefile?
答:
make:
-
make是Linux操作系统中用于管理软件项目的一种工具,能够高效地将项目文件组织起来。
-
make是一个命令工具,它用来解释makefile中定义的指令或规则。
Makefile:
-
makefile文件用来描述源程序之间的相互关系并自动维护编译工作,即描述了整个工程的编译、连接等规则。其中包括:工程中哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件,如何最后产生可执行文件。
-
GNU make 工具在当前工作目录下按照文件名顺序寻找
makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。