实验四:Linux系统C语言开发环境学习
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 班级课程主页链接 |
| 这个作业的要求在哪里 | 作业要求 |
| 学号—姓名 | 17043133—木腾飞 |
| 作业学习要求 | 1.学习Linux系统中如何查看帮助文档; 2.在Linux系统中安装C语言编译器等开发工具(编辑器,编译器); 3.Linux系统下单个C语言文件编译链接过程(预处理,编译,汇编,链接,执行); 4.Linux系统下多个C语言文件编译链接(命令行方式,make方式) |
1.安装C语言开发环境
(1)安装C语言编译环境

(2)查看gcc版本信息

gcc简介:
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、Objective-C、Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如Livstdc++、libgc等)
(3)查看make版本信息

make介绍:
在Linux环境下GNU在make工具能够比较容易的构建一个属于自己的工程,整个工程的编译只需要一个命令就可以完成编译、链接以及执行。
make是一个命令工具,它解释Makefile中的命令(规则),在Makefile文件中描述了整个工程所有文件编译顺序,编译规则。
2.简单C语言练习
(1)首先通过man命令查看帮助文档


man命令简介:
Linux有一个很好的工具,就是man。它会按照系统设计帮助目录,在各个文档里面查询,并显示内容。
man命令:可以通过一些参数,快速查询Linux帮助手册,并格式化显示。
(2)命令模式简单C语言编译链接等操作
通过vim编辑器写一个简单的C语言程序,如写一个输出自己学号的程序。
先创建一个文件夹,然后进入该新创建的文件夹。


输入完了源程序,接下来进行C语言编译的四个阶段:
a)预编译:预处编译段将根据已放置在文件中的预处理命令来修改源文件内容。(在正式的编译阶段之前)
b)编译:源代码优化,生成汇编代码,生成.s文件。
c)汇编:根据汇编指令和特定平台,把汇编指令翻译成二进制形式,合并个section,合并符号表,生成.o文件。
d)链接:地址和空间的分配,符号决议和重定位,生成可执行文件。
a)预编译


gcc -E #仅执行编译预处理
gcc -O #指定生成的输出文件及文件名
b)编译

gcc -S #生成汇编源文件
cat test.s #显示如下

vim test.s #显示如下

c)汇编

gcc -c #编译源码生成最后目标文件

d)链接


e)运行

r:read就是读权限
w:write就是写权限
x:excute就是执行权限
3)多文件编译
在exp4文件夹下创建一个文件夹mfc(multi-files compile),在文件夹下创建五个文件,文件名如下:





每个文件的内容分别如下:
(1)main.c

(2)my1.h

(3)my1.c

(4)my2.h

(5)my2.c

完成上面的代码输入,接下来我们进行编译。
对于多个文件编译,我们可以一次编译链接生产可执行文件,也可以分别编译每个C文件,再进行链接得到可执行文件。


请说明这两种方法的区别?
第一种方法:一次编译链接直接生成可执行文件,不产生目标文件;
第二种方法:非别对每个C文件进行编译产生目标文件,之后再进行链接得到可执行文件。
接下来我们编写有一个简单的Makefile,通过make工具帮助我们进行编译。
在当前文件夹编写一个Makefile文件


Makefile简介:
Makefile带来了直接好处就是—"自动化编译"。
文件一旦写好,只需要make命令,整个工程完全自动编译,十分便捷.
而Makefile文件就是告诉make命令怎样去编译和链接程序。
实验四:Linux系统C语言开发环境学习的更多相关文章
- 实验四 Linux系统C语言开发环境学习
项目 内容 这个作业属于哪个课程 Linux系统与应用 这个作业的要求在哪里 作业要求链接 学号-姓名 17041428-朱槐健 作业学习目标 1.Linux系统下C语言开发环境搭建 2.学习Linu ...
- Linux系统c语言开发环境
项目 内容 这个作业属于哪个课程 班级地址 这个作业要求在哪里 作业要求地址 学号-姓名 17041506-张政 学习目标 Linux系统下C语言开发环境搭建,学习Linux系统环境C语言开发过程 L ...
- 实验四 Linux系统搭建C语言编程环境
项目 内容 这个作业属于那个课程 <班级课程的主页链接> 这个作业的要求在哪里 <作业要求链接地址> 学号-姓名 17043220-万文文 作业学习目标 1).Linux系统下 ...
- Windows10下配置Linux下C语言开发环境
今天为大家介绍如在Windows10下配置Linux下C语言开发环境,首先安装linux子系统:启用开发者模式 1.打开设置 2.点击更新和安全3.点击开发者选项 4.启用开发人员模式 5.更改系统功 ...
- 实验一 Linux基础与Java开发环境
实验一 (一)实验内容 基于命令行和IDE(Intellj IDEA 简易教程http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑.编译 ...
- 20162312 实验一 Linux基础与Java开发环境
实 验 报 告 课程:程序设计与数据结构 姓名:张家铖 班级:1623 学号:20162312 实验名称: Linux基础与Java开发环境 实验器材:msi GL62M 7RD 实验目的与要求:1. ...
- linux + eclipse C语言 开发环境搭建
经常与linux系统打交道,了解学习一下C语言,下载eclipse c/c++ linux版,直接在虚拟机linux系统上安装http://www.eclipse.org/downloads/pack ...
- linux 系统下java开发环境的配置
在安装之前,确保你的linux系统下有 jdk,jboss等相关软件 一.配置JDK环境变量 步骤: 解压缩JDK文件: unzip jdk1.6.0_31.zip 目录下显示文件夹jdk1.6.0_ ...
- Linux系统下Java开发环境的配置(未完...)
1.查看jdk版本 java -version 2.将下载好的jdk放在/usr/lib/jvm里(其中jvm是自己起的名) sudo mv jdk1.8.0_111 /usr/lib/jvm ...
随机推荐
- 使用ScriptX控件进行Web横向打印
一个需求需要采用横向打印,目前采用IE自身的打印功能(WebBrowser.ExecWB控件)很难进行横向设置,默认需要调用document.all.WebBrowser.ExecWB(8,1);打开 ...
- Vim Configuration
安装原生态的Vim之后,界面是这样的: 行号,没有:自动缩进,没有:括号匹配,没有~ 为了我们使用的方便,进行一些基本的配置: sudo vim /etc/vim/vimrc 进入配置界面: 如下图进 ...
- 数学--数论--HDU 6128 Inverse of sum (公式推导论)
Description 给nn个小于pp的非负整数a1,-,na1,-,n,问有多少对(i,j)(1≤i<j≤n)(i,j)(1≤i<j≤n)模pp在意义下满足1ai+aj≡1ai+1aj ...
- USACO Training Section 1.2 [USACO1.2]方块转换 Transformations
题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针 ...
- json格式总结
json格式分为两种: 1.键值对: 2.数组:其中元素可以是字符串.数字.数组,还可以相互嵌套 其中图片来源于:https://blog.csdn.net/huapenguag/article/de ...
- 从零开始通过webhooks实现前端自动化
1. 前置条件 有一台自己的服务器.比如阿里云,腾讯云之类 有远程仓库能够push代码,pull代码.比如github,或者码云 远程仓库有webhooks功能 2. 自动化部署流程 3. 构建流程 ...
- PLAI那些事_06 FAE
没有了with表达,with,exp,body的id换成exp的lambda函数,从而可以没有with来进行实现.即,{with {id exp} body}换成了{{fun {id} body} e ...
- 一元三次方程 double输出 -0.00
求一个 a*x*x*x+b*x*x+c*x+d 的解 题目很简单,但是我输出了-0.00,然后就一直卡着,这个问题以后要注意. 让0.00 编程-0.00的方法有很多. 第一种就是直接特判 if(fa ...
- 报错:Maven创建An internal error occurred during: "Retrieving archetypes:". Java heap space
在Eclipse中创建Maven的Web项目时出现错误:An internal error occurred during: "Retrieving archetypes:". J ...
- mysql中的读锁和写锁
当mysql为一个表开启读锁的时候,其他进程包括进程本身没有权利去修改这张表的内容,也没有权利更新,但是可以读取表里面的内容 如下例子 给表上读锁 接着更新一下,显示被锁了 释放锁并插入数据 写锁 查 ...