实验四 Linux系统C语言开发环境学习
实验四 Linux系统C语言开发环境学习
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 课程链接 |
这个作业的要求在哪里 | 作业要求 |
学号-姓名 | 17041401-黄兰兰 |
作业学习目标 | 1、Linux系统下C语言开发环境搭建 2、学习Linux系统环境C语言开发过程 |
实验内容
1.安装c语言开发环境
sudo apt install build-essential
1).查看gcc的版本信息
gcc -v
2).查看make版本信息
make -v
2.简单C语言练习
1)首先我们通过man命令查看帮助文档
man gcc
2)命令行模式简单C语言编译链接等操作
我们可以通过vim编辑器编写一个最简单的C语言程序,如写一个输出自己学号的程序。先创建一个文件夹,然后进入该新创建的文件夹。
由于一开始我系统的vim编辑器的配置文件被重新更新了,所以中间一系列操作文件名就不一致了,下面我重新配置vim后,建了另一个文件test2.c
cat test2.c
a.预编译
gcc -E test2.c -o test2.i #预编译
test2.c #源程序文件
test2.i #预编译后生成的文件
vim编辑器编写test2.c
用cat查看文件内容
b.编译
gcc -S test2.i -o test2.s
test2.s #编译后生成的文件
c.汇编
gcc -c test2.s -o test2.o
test2.o #目标文件即二进制文件
通过objdump命令来反汇编该文件来分析文件内容
d.链接
gcc test2.o -o test2
test2 #可执行文件
用objdump命令来反汇编该文件分析文件内容
objdump -d test2
e.运行
3).多文件编译
在exp4文件夹下面再建一个文件夹mfc
在该文件夹下面创建5个文件,文件名分别如下:
每个文件的内容分别如下:
cat main.c #查看main.c文件内容
cat my1.h #查看my1.h文件内容
cat my1.c #查看my1.c文件内容
cat my2.h #查看my2.h文件内容
cat my2.c #查看my2.c文件内容
接下来进行编译,对于多文件编译,可以一次编译链接生成可执行文 件,也可以分别编译每个C文件,最后再进行链接得到可执行文件。
请说明两种方法的区别?
多个文件一起编译时:
gcc my1.c my2.c main.c -o main1 将my1.c、my2.c、main.c分别编译后链接成main1可执行文件。
分别编译各个源文件,之后对编译后输出的目标文件链接:
gcc -c my1.c 将my1.c.c编译成my1.o
gcc -c my2.c 将my2.c编译成my2.o
gcc -c main.c 将main.c编译成main.o
gcc my1.o my2.o main.o -o main2 将my1.o、my2.o、main.o链接成main2可执行文件
由于之前的文件夹已存在可执行文件,故先将可执行文件删除,再编写一个简单的Makefile,通过make工具进行编译。
make #根据Makefile文件编译源代码、连接、生成目标文件、可执行文件。
查看Makefie文件内容
Makefile #makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令
make clean make clean #清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件
原文地址:https://www.cnblogs.com/huanglanlan/p/12582959.html
- 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github
- 微信公众平台快速开发框架 For Core 2.0 beta –JCSoft.WX.Core 5.2.0 beta发布
- Android系统层Watchdog机制源码分析
- 算法之插入排序
- Android Studio环境下搭建ReactNative
- Android实现两个ScrollView互相联动,同步滚动的效果
- 一个可以拖动的自定义Gridview代码
- android图片加载库Glide
- 密码最短长度为7,其中必须包含以下非字母数字字符1 完美解决方案
- android开发性能分析
- url带中文参数显示乱码的问题
- 转换程序的一些问题:设置为 OFF 时,不能为表 'Test' 中的标识列插入显式值。8cad0260
- JQuery 对控件的事件操作
- 流畅地HtmlHelper-Asp.Net MVC
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法