实验二 Linux下C语言编程基础

一、实验目的

1. 熟悉Linux系统下的开发环境

2. 熟悉vi的基本操作

3. 熟悉gcc编译器的基本原理

4. 熟练使用gcc编译器的常用选项

5 .熟练使用gdb调试技术

6. 熟悉makefile基本原理及语法规范

7. 掌握静态库和动态库的生成

二、实验步骤

1. 快捷键

Ubuntu中:

2. vim

VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM

VI来说,一开始就需要相当大的技能,但一旦掌握这些技能,则你将会越来越熟练,这跟五笔打字很类似。我们建议通过实践练习来学习具体来说通过VIMTUTOR或玩游戏(Vim大冒险或PacVim)来学习。

玩游戏去Vim大冒险或PacVim通关就学会了VIM。

想当程序员用这张专门给程序员的键盘图程序员有几个键提示一下:

  • 大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
  • 几个设置

:set nu 显示行号

:set ai 自动缩行

:set ts=4 设置一个 TAB 键等于几个空格

  • 移动光标

[[ 转到上一个位于第一列的"{"

]] 转到下一个位于第一列的"{"

{ 转到上一个空行

} 转到下一个空行

gd 转到当前光标所指的局部变量的定义

深入学习参考:

  • 3. gcc
  • GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。

GCC编译代码的过程如下:

我们可以把编译过程分成四步,以编译hello.c生成可执行文件hello为例

  • 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
  • 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
  • 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
  • 链 接:gcc hello.o –o hello ;gcc -o 调用ld

编译过程比较难记,我们简化一下,前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”,这样记忆起来就容易多了。

4. gdb

建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

  • gdb programm(启动GDB)
  • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
  • run 开始运行程序
  • bt 打印函数调用堆栈
  • p 查看变量值
  • c 从当前断点继续运行到下一个断点
  • n 单步运行
  • s 单步运行
  • quit 退出GDB

问题:GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数,那么实际使用中应该优先选用哪个?为什么?

其他几个我认为应该掌握的调试命令有:

  • display 跟踪变量值的改变
  • until 跳出循环
  • finish 跳出函数
  • help 帮助

学习参考:

5. make与makefile

三、练习

1.练习vimtutuor至少一遍;

2.使用vim 输入以下代码,联系使用“K”查找帮助文档:

3.练习gcc编译运行代码;

4.练习gdb调试代码;

5.把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so;

6.编写makefile,让代码编译,上述静态库和共享库的使用自动化。

 
实验心得:通过实验,我们学习了gcc编译器的相关操作,就是引用数学函数后,在编译时要加参数。也要遵循部分规则,c为后缀的文件,C语言源代码文件,Linux下C语言编译器gcc不认识bool类型的问题。而简单的makefile文件中,Make 从 makefile(默认是当前目录下的名为‘Makefile’的文件)中读取项目的描述。makefile指定了一系列目标(比如可执行文件)和依赖(比如对象文件和源文件)的编译规则.而GDB调试器必须要记得学会基本命令,如果要进行编译,就要在 gcc下使用额外的 -g。
  

第三周linux学习的更多相关文章

  1. 第三周LINUX学习笔记

    周期性任务丶find 文件查找:find命令 locate :在数据库中查找,非实时查找,精确度不高,查找速度快,模糊查找  /tmp/passwad/a.textfind:实时查找:速度慢  ,精确 ...

  2. 第三周Linux学习报告

    Linux内核源代码简介: arch/x86中内容重点关注 init目录重要,内核启动相关的代码基本上都在init目录下.如main.c等.Start_kernel函数相当于普通C程序的main函数. ...

  3. 第三周java学习总结

    学号 20175206 <Java程序设计>第三周学习总结 教材学习内容总结 本周为第四章的学习,分为以下几个方面: 1.包与代码组织 2.String类 3.对象创建 4.包装类 经过代 ...

  4. 2018年-2019年第二学期第三周C#学习个人总结

    在第三周,我们又开始了C#的进一步学习,学习的范围是从4.8static关键字到4.11对象初始化器.在4.8static关键字我学到了静态字段,静态属性,静态方法,静态类,静态构造方法单例模式,嵌套 ...

  5. 201621123005《Java程序设计》第三周作业学习总结

    201621123005<Java程序设计>第三周 学习总结 标签(空格分隔): 未分类 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化 ...

  6. 1903021121—刘明伟—Java第三周作业—学习在eclipse上创建并运行java程序

    项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第三周作业 作业要求 每道题要有题目,代码,截图 扩展阅读 eclipse如何创建java程序 java语言基础(上) 扩展阅读心得: 想 ...

  7. Linux系列教程(三)——Linux学习技巧

    前面我们讲了Linux系统的详细安装教程,大家跟着教程一步一步的操作,应该能完美的完成安装.那么这篇博客跟大家聊聊如何来学习Linux. 1.工欲善其事必先利其器 ①.第一个问题:通过前面在虚拟软件中 ...

  8. 第八周LINUX学习笔记

    vsftpd丶NFS丶SAMBA nfs基于rpcsamba基于cifs(smb)  DRBD: ftp:File Transfer protocol 文件传输协议 两个连接:       tcp:命 ...

  9. 第七周LINUX学习笔记

    HTTP的基本操作 3月17资源子网和通信子网套接字:两类    socket:IP port             IP:port            Ip.port unix sock:基于文 ...

随机推荐

  1. 不大于N的所有素数

    算法如下: #include<stdio.h> #include<math.h> void Sieve(int n) { int p,j,i; ],L[n+]; ;p<= ...

  2. Linux入门基础(一):Linux基本操作

    命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...

  3. PHP切割字符用到的explode 以及计数count

    在thinkphp中同样可以用 explode来进行字符的切割工作,比如 $jihe='1,2,3,4'; 在使用explode之后,可以获得一个数组: $array=explode(',',$jih ...

  4. 【NoSql】之Hbase

    Hbase概述 ·  Hbase是构建在hdfs上的分布式列式存储系统 ·  Hbase内部管理的文件全部存储在HDFS上面, ·  Hbase是基于google bigtable 模型开发的,典型的 ...

  5. rtthread移植到jz2440之BootLoader

    从2016年第一次接触rtthread,感觉很容易上手,记得一个项目是小飞行器上的IPC,趁着空闲,手里有一块jz2440的板子,准备在这块板子上跑起来rtthread,查了很多资料,最后决定自己写一 ...

  6. 针对于网络安全领域中基于PCAP流量的数据集

    网络安全领域中基于PCAP流量的数据集 MAWI Working Group Traffic Archive URL:http://mawi.wide.ad.jp/mawi/ CIC dataset ...

  7. 20155305mypwd的实现和测试

    20155305mypwd的实现和测试 pwd命令及其功能 命令格式: pwd 命令功能: 查看"当前工作目录"的完整路径 常用参数: 一般情况下不带任何参数 作业mypwd代码实 ...

  8. JavaScript总结(一)

    什么是JavaScript? 首先我们要知道它是什么?JavaScript是一门专门用来对网页进行编程的脚本语言:因为我是学习Java之后再来学习JavaScript的,所以我的第一疑问JavaScr ...

  9. PostreSQL崩溃试验全记录

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackg ...

  10. CentOS 7.X 关闭SELinux

    1.查看 [root@dev-server ~]# getenforce Disabled [root@dev-server ~]# /usr/sbin/sestatus -v SELinux sta ...