1.实验任务
1) 熟悉并基本掌握GCC的基础知识
2) 为自己的工程编写makefile文件
2.实验内容
2.1 gcc 执行过程
2.1.0 准备工作
Ubuntu中GCC的安装
sudo apt-get update /*更新源地址*/
sudo apt-get install gcc /*安装GCC*/
注:谨慎选择可用源,注意源是否支持当前linux版本
2.1.1 实验 一
新建一个名称为 1的c文件
sudo gedit 1.c
键入简单的C语言程序
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX3FERNNzZU10dJRUT4N2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM0UzMxcDNzEzNxcDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
预编译过程
处理宏定义和include,并做语法检查。
注:
| 表示管道,处理经由前面一个指令传出的正确输出信息,也就是传递cat的结果;wc -l 统计该文件的行数。
cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容
编译过程
这个阶段,生成汇编代码并进行语法检查。
汇编过程
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码。
注:as 命令GNU组织推出的一款汇编语言编译器,作用是汇编制定的汇编文件
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程
链接过程:
生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
程序运行
2.1.2 实验二
新建 hello.c
执行情况如下:
注:结果中出现的Warning是因为在修改系统文件时我们不能使用sudo命令去修改,必须使用系统内置的管理员权限,即最简单的方法是使用gksudo命令启用root编辑,当然你可以把的账户权限添加到管理员权限中也是可以的
2.2 编写makefile文件
2.2.1 实验三
首先新建文件
包括makefile sub1.c sub2.c main.c cmx.h
然后编辑各个文件的内容:
makefile文件
注:rm -f为强制删除文件或目录
main.c文件
sub1.c文件
sub2.c文件
头文件cmx.h
执行make,默认在当前路径下查找makefile文件并执行。如下图所示
注:make需要另行安装
(很尴尬的事……sub2.c里面忘记换行……emmmmmm……)
3 实验心得
GCC指令
语法
gcc(选项)(参数)
选项
-o:指定生成的输出文件;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-wall:显示警告信息;
-c:仅执行编译操作,不进行连接操作。
参数
C源文件:指定C语言源代码文件。
4.引用链接
https://blog.csdn.net/qq_33478897/article/details/77456537
http://man.linuxde.net
https://blog.csdn.net/shenquanyue/article/details/79699466
http://blog.sina.com.cn/s/blog_675f93ad0102vc2h.html