Linux Ubuntu18.04 gcc 编译时报错->在函数‘_start’中: (.text+0x20):对‘main’未定义的引用

目录

  • 使用gcc编译时出现 :(.text+0x20):对‘main’未定义的引用
    • 错误显示
    • 解决办法
      • 我的过程
      • 我的错误是因为:
    • make、Makefile 小知识

使用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

显示:
Linux Ubuntu18.04 gcc 编译时报错->在函数‘_start’中: (.text+0x20):对‘main’未定义的引用_第1张图片
我发现这写的代码和之前写的不太一样:#include 应该放在.h文件上。
于是,修改为:
Linux Ubuntu18.04 gcc 编译时报错->在函数‘_start’中: (.text+0x20):对‘main’未定义的引用_第2张图片
这样比较简洁一点,其实两种都可以的,刚刚试了一遍。

我的错误是因为:

我写把gcc 的 "-c -o: 写成大写了, 应该是小写的。
其次,我是使用 makefile 编译的。

makefile内容:
Linux Ubuntu18.04 gcc 编译时报错->在函数‘_start’中: (.text+0x20):对‘main’未定义的引用_第3张图片

输入命令:make,显示:
在这里插入图片描述
输入运行命令:./hello ,显示:
在这里插入图片描述

make、Makefile 小知识

什么是make?什么是Makefile?其主要作用是什么?默认情况下,GNU make 工具在当前工作目录按什么顺序搜索makefile?

答:
make:

  • make是Linux操作系统中用于管理软件项目的一种工具,能够高效地将项目文件组织起来。

  • make是一个命令工具,它用来解释makefile中定义的指令或规则。

Makefile:

  • makefile文件用来描述源程序之间的相互关系并自动维护编译工作,即描述了整个工程的编译、连接等规则。其中包括:工程中哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件,如何最后产生可执行文件。

  • GNU make 工具在当前工作目录下按照文件名顺序寻找
    makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。

你可能感兴趣的:(ubuntu,linux)