




已阅读5页,还剩235页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 Welcome 嵌入式Linux系统培训 Linux操作系统入门 2 一周课程安排 一 Linux操作系统结构 常用的LinuxShell命令二 开发环境使用 ultraedit nfs samba 超级终端 wins minicom linx Shell编程实验三 编译器GCC使用 调试器GDB 项目管理工具MAKE标准I O开发 文件I O操作编程四 实验 设置编译环境 文件I O实验 包括如何实验GCC MAKE 3 Linux是什么 Linux是一种计算机操作系统和它的内核的名字 它也是自由软件和开放源代码发展中最著名的例子 4 Linux是一种 Linux是一种Unix类操作系统Unix类 5 Linux的诞生 1991年 LinusTorvalds还是芬兰赫尔辛基大学的一名学生 最初用汇编语言写了一个在80386保护模式下处理多任务切换的程序 后来从Minix中得到灵感 发誓要写一个比Minix更好的Minix 于是开始写了一些硬件的设备驱动程序 一个小的文件系统 这样0 0 1版本的Linux就出来了 但是他必须在有Minix的机器上编译以后才能玩 这时候的Linus已经完全 走火入魔 了 决定完全脱离Minix 于是在1991年10月5号发布了Linux0 0 2版本 这个版本已经可以运行bash 一种用户与操作系统内核通讯的软件 和gcc GNUC编译器 了 6 Linux的编年史 1 1991年11月 芬兰赫尔辛基大学的学生LinusTorvalds写了个小程序 取名为Linux 放在互联网上 1993年 在一批高水平黑客的参与下 诞生了Linux1 0版2 1994年 Linux的第一个商业发行版Slackware问世3 1996年 美国国家标准技术局的计算机系统实验室确认Linux版本1 2 13 由OpenLinux公司打包 符合POSIX标准4 1999年起 多种Linux的简体中文发行版相继问世 国内自己创建的有BluePointLinux FlagLinux XtermLinux等 美国有Xlinux TurboLinux等5 2001年 Linux2 4版内核发布6 2003年 Linux2 6版内核发布7 现在i 市场上出现多种Linux发行版ii Linux广泛用于桌面系统 嵌入式系统 网络服务器系统iii 众多大厂商参与Linux的开发工作 Linux可用软件越来越多 7 开启你的Linux旅途 8 第一步 如何使用Vmware打开RedHatLinux演示 9 Linux的启动与初始化 LinuxBootStop BIOS openthepower kernel boot lilo grab mingetty init shell login linuxperation Logonprogram 引导 启动第一个进程 10 第二步 登陆Linux系统 终端模式 LinuxLogin Password 终端提示符 Xwindow模式 RedHatLinuxrelease7 3 Valhalla Kernel2 4 18 3onan1686localhostlogin rootPassword 123456localhostlogin rootPassword LastLogin SunSep1120 Youhavenewmail root localhostroot localhostlogin sunkangPassword sunkang localhostsunkang 11 Linux 登陆与退出 logout 退出登录 exit reboot 重启系统shutdown 关闭系统poweroff 关闭系统halt 系统挂起 12 第三步 如何启动终端 在菜单中 选择 系统设置 终端 13 开始使用 终端 下面将介绍的是 1 Linux操作系统的根文件系统 目录 2 Linux操作系统的系统文件结构3 常用的Linux操作系统shell命令 14 1 Linux操作系统的根文件系统 FHS FilesystemHierarchyStandardFHS 规范档案目录的命名及存放标准大多数Linux系统遵循FHSLinux 目录 路径目录 Directory 路径 绝对路径例 usr src linux 15 根文件系统 基本文件系统结构至少含有以下目录 dev proc bin etc lib usr tmp最基本的应用程序 如sh ls cp mv等最低限度的配置文件 如rc d inittab fstab等设备 dev hd dev tty dev fd0基本程序运行所需的库函数 16 1 Linux操作系统的根文件系统 以Redhat为例 bin linux常用的命令 如cp ls ping mount vi tar kill grep rpm dd ps ln gzip cat等 boot 启动文件 如vmlinuz dev 设备文件 如fd0 软盘 hda 第一硬盘 hdal hdb sda sdal cdrom hdc mouse psaux 等 hd harddisk sd scsi etc 配置文件 如hosts lilo conf inittab rc d dir samba smd conf等 17 根文件系统 home root 每个用户在home下有一个自己的目录 root的在 root 权限和保护 lost found Lost found 一些丢失的文件可能可以在这里找到 lib 共享库相关文件 mnt mount文件系统到这个目录如cdrom floppy 18 根文件系统 var 执行中记录数据 proc 内存文件 报告程序执行的在线动态信息 如进程id数字目录 sys net等 proc sys net 目录主要包括了许多网络相关的主题 例如 appletalk ethernet ipv4 ipx 及ipv6 通过改变这些目录中的文件 网络管理员能够在系统运行时调整相关网络参数 sbin 启动时需要 系统管理员程序工具 配置等 如fsck 修复分区 lilo 安装引导程序 init 内核启动的第一个用户进程 fdisk等 tmp 临时文件夹 usr 用户应用程序和文件 19 2 Linux文件系统结构 应用程序 存储设备 RelserFS VFS 文件访问请求 文件系统 EXT3 设备驱动程序 NTFS ISO9660 VirtualFileSystem是Linux内核中的一个软件层 用于给用户空间的程序提供文件系统接口 它提供了内核中的一个抽象功能 允许不同的文件系统共存 VFS提供统一的接口 open read write 访问不同的实际文件系统 所以Linux系统可以同时支持多种文件系统一个文件系统通常占用一个逻辑分区 20 EXT2 TheSecondExtendedFileSystem EXT2文件系统的整体结构和布局 超级块 文件系统基本信息的描述 包括文件系统大小 状态组描述符 描述每个块组的控制和统计信息I节点 用于描述一个文件或目录 模式 拥有者信息 文件大小 时间标志 数据块指针 21 EXT3 EXT2的加强版本 EXT3EXT3是一种日志文件系统 它会将磁盘的写入动作完整记录在磁盘的某个区域上 以免突然情况下发生不一致现象 资料有效性资料完整性tune2fs 将ext2文件系统的分区转移成ext3文件系统的分区 22 设备也是一个文件 23 3 常用的Linux操作系统shell命令 内核信息关于当前内核的基本信息 uname命令 uname a 显示内核基本信息 例如 2 4 18内核版本 major minor patchlevel 核心版本 主号 偶数为稳定版本 第几次的修改 从0开始 内核源文件所在目录 内核源码通常被置于 usr src linux下 24 目录相关的命令 cd changedirectory 切换到其他目录 格式 cddirectory例 cd usrpwd presentworkingdirectory 显示当前路径 格式 pwd 25 实例 进入 usr进入 usr src linux1 cdsrc linux2 cd src linux3 cdsrc cdlinux回到 usr1 cd usr2 cd 回到根目录 进入 home1 cd home 26 ls ls命令用于显示目录内容 类似DOS下的dir ls options filename 主要参数 a all 列出所有文件 包括隐藏文件 l 使用较长格式列出信息 m 所有项目以逗号分隔 并填满整行行宽 R recursive 同时列出所有子目录层 蓝色表示是目录 绿色表示是可执行文件 红色表示是压缩文件 浅蓝色表示是链接文件 灰色表示是其他格式文件 ls最常使用的是ls l 其别名为ll 27 文件操作相关的命令 mkdir makedirectory 创建一个文件夹 如 mkdirtemprmdir removedirectory 删除目录 要求目录是空的 如 rmdirtemp 28 cpandmv cp option 可有可无 源地址目的地址如 cpfile1file2将文件file1复制成file2 cpfile1dir1将文件file1复制到目录dir1下 cp tmp file1file2cp rdir1dir2复制整个目录 mv option 源地址目的地址mvfile1file2将文件file1更名为file2 mvfile1dir1将文件file1移到目录dir1下 mvdir1dir2将目录dir1更改为目录dir2 29 rm rmfile1删除文件名为file1的文件 rmfile 删除文件名中有五个字符且前四个字符为file的所有文件 rmf 删除文件名中以f为字首的所有文件 rm rdir1删除目录dir1及其子目录下所有文件 rm rfdir1不须确认 force 强制 30 file file通过探测文件内容判断文件类型 file option 文件名使用file命令可以知道某个文件究竟是二进制的可执行文件 还是ShellScript文件 或者是其它的什么格式 file能识别的文件类型有目录 Shell脚本 英文文本 二进制可执行文件 C语言源文件 文本文件 DOS的可执行文件 filegrapgrap Englishtextfile命令不能探测包括图形 音频 视频等多媒体文件类型 31 帮助命令 man 用户手册 mannual 手册的章节 格式 mancommand manman man S2readinfo 读取info版的帮助文档 格式 infocommand infoinfowhatis 从whatis数据库里找某个命令的简单描述 格式 whatiscommand whatismanApropos 从whatis数据库中找某个字符串 格式 aproposkeyword aproposprint help 命令参数 显示简单的用户帮助 格式 command help 32 ln ln命令用来在文件之间创建链接ln option 源文件 链接名 s 进行软链接 SymbolicLink 链接有两种 硬链接 HardLink 缺省 符号链接 SymbolicLink 硬链接指通过索引节点来进行的连接 每个文件都有一个编号 称为索引节点号 InodeIndex 33 ln 符号连接 SymbolicLink 也叫软连接 类似于Windows的快捷方式 实际上是一个文本文件 包括有另一文件的位置信息 如 ln s usr local httpd htdocsgg这样每次进入gg目录就可以访问Web服务器的文档 以后如果不再访问Web服务器的文档时 删除gg即可 而真正的Web服务器的文档并没有删除 34 时间设置 修改系统时间 root dellvick dateTueMar2819 20 31CST2006 root dellvick date s Mar2819 19 root dellvick date s 2006 3 2819 19 s 表示修改日期修改后执行clock w或clock systohc到硬件时钟 也可以用hwclock命令 35 Linux的Shell Shell 外壳 也就是界面Shell的作用 接受输入 解释接受到的输入信息 输出结果 36 Linux的Shell Linux下常见的Shell Sh Bourneshell Bash BourneAgainShell 最常用 Csh CShell 加州大学伯克利分校 与BourneShell基本兼容 但是程序设计界面有很大不同 Ksh KornShell Unix系统下最普遍的 Tcsh CShell的加强版 Zsh ZShell 最新的Shell 与BournShell兼容 37 bourneshellV7时发布 作者是AT T贝尔实验室的stephenbourne 替代了thompson的sh 成为unix的缺省sh 位于bin sh theBoutneAgainShell 1 它们是由FSF员工BrianFox开发的 38 BASHshell特点 bash是大多数linux系统的缺省外壳 提供以下一些服务 补全命令行 按Tab键输入 输出重定向 重定向用于改变命令的输入输出方向 输出重定向用于将命令的结果输入到文件中 而不是屏幕上 输入重定向的命令是 通配符 在bash下可以使用通配符 和 可以替代多个字符 而 则替代一个字符 39 BASHshell特点 管道 用于将一系列的命令连接起来 也就是把前面的命令的输出作为后面的命令的输入 作业控制 可以挂起一个正在执行的进程 并在以后恢复该进程的执行 按下Ctrl Z挂起正在执行的进程 用bg命令使进程恢复在后台执行 用fg命令使进程恢复在前台执行 设置 删除环境变量设置 export变量名 变量值 TEST haha exportTEST查看变量值 echo TEST删除 unset变量名 echo TEST unsetTEST 40 管道符号 管道符号是什么 管道符号的作用 将一个命令的输出定向成另一个命令的输入 如 command1 command2 command1的输出将成为command2的输入通常结合more less使用ls R1 morecatfile1 more 41 启动文件 etc rc d rc local init etc profile 可设置环境变量 bashprofile 环境变量 登录后仅一次 bashrc 由 bashprofile调用 每次打开新的shell时 该文件被运行 etc bashrc bashrc调用 所有用户 如果没有 bashprofile文件时 bash会查找 bash login 如果也不存在 bash会查找 profile文件 bash logout会在用户logout时被运行 如清除屏幕和临时文件等 42 Shell常用键 Ctrl H 退格Ctrl C 中断当前程序Ctrl Z 暂停程序 使用fg重新启动程序Ctrl S 停止输出 STOP Ctrl Q 启动输出Ctrl D inshelllogout等同于在shell里键入exitCtrl L 清屏clearscreenCtrl M 回车 r0 x0DCtrl J 换行 n0 x0A 43 进程管理 ps 显示系统中的进程kill 杀掉进程fg 将后台的进程放到前台运行bg 将某个进程放到后台运行 44 psandkill ps查看系统中属于自己的进程 ps aux查看系统中 包含系统内部的及所有用户的进程 ps aef killPIDPID 利用ps命令所查出的进程号 kill456终止进程号为456的进程 在后台执行进程的方式语法 命令 例如 gccfile1 c 将编译file1 c文件的工作置于后台执行 45 bgandfg 按下Ctrl Z键 暂停正在执行的进程 bg命令 暂停的进程置于后台继续执行 如 gccsample 1 c 在 home bc file progarm ZStoppedbgfg命令 将后台执行的进程置于前台jobs查看正在后台中执行的进程 46 备份与压缩 压缩工具 gzip和gunzip 压缩 解压缩 其实是同一个文件 系统通过分辨命令名来区分是压缩还是解压缩 压缩文件 不压缩目录 在 home bc file progarm gzipsample 1 c得到sample 1 c gz seeiftheoriginalfile gunzipsample 1 c gz得到sample 1 c 47 tar 将多个文件 包括目录 打包 可压缩 成一个文件 打成的包常被称为tarball 最常用的命令tarzcvf1 tar gz gif 或1 tgz也表明是tar gz格式 tarzxvf1 tar gzdir1 dir是一个目录 z 使用gzip压缩x 解开包c 生成包f 指定文件名v 显示详细信息注意 tar的选项z可以不使用 48 tar 对于 tar bz2格式使用bunzip2 可以先解压为 tar格式 bunzip2foo tar bz2得foo tar tarxvffoo tartarjxvf tar bz2注意 j代表bunzip2 49 locate 通过文件名搜索文件 前提是需要通过updatedb建立索引数据库 root localhost updatedb 需要一定的时间 举例 要找samba conf文件都位于哪些位置 locatesamba conf 50 whereis 用来寻找命令及其帮助文件 比如你想知道fdisk工具放在哪里 就可以用whereisfdisk来查找 whereisfdiskfdisk sbin fdisk usr share man man8 fdisk 8 gz 51 which which和where相似 只是在设置的环境变量PATH中寻找 比如 whichfdisk sbin fdisk 52 grep grep 在指定的文件中查找一个字符串例如 root bc grep add cbar c intadd intx inty foo c printf x y 3d n add x y 注意 在文件所在的当前目录查找 53 find 根据给定的参数在指定目录中查找文件find path expression find usr include name stdio h find mtime 6 mtime 86天以前8天以内修改过的文件 n greatthann nlessthann nexactlyn find size 10c size 20c搜索文件介于10byte到20byte之间 sizen bckw 54 用户管理 useradd adduser 添加用户 useraddahkangpasswd 添加用户密码 passwdahkanguserdel userdelahkanggroupadd 添加组 groupaddvoipgroupdel groupdelvoipUsermod 修改用户名 usermod Gvoipahkang 在管理员身份下才可进行 55 文件系统的挂载与卸载 mount 挂载文件系统格式 mount tfstypedevicemount point例 mount tvfat dev sda1 mnt usbdiskumount 卸载文件系统格式 umountdeviceORumountmount point例 umount dev sda1系统启动时自动挂载文件系统 etc fstab 56 ttypeminix ext2 msdos vfat win95 98 nfs iso9660 ntfs winNT hpfs OS 2 auto 自动检测文件系统 列出目前加载的ext2文件系统mount text2模拟加载 查看mount的执行过程 配合 v 57 文件系统的挂载与检查 Linux下使用光盘挂载 mount tiso9660 dev cdrom mnt cdrom卸载 umount dev cdrom eject eject t 弹出和收回光驱 检查与修复文件系统命令 fsck ttypedevice例 fsck text2 dev hda2 58 proc文件系统 一种虚拟文件系统 内核和内核模块用来向进程 process 发送信息的机制 所以叫做 proc 访问方式 基于文件的接口 与其他文件系统一样 只是访问的内容由内核提供 而不是由存储介质提供 59 proc文件系统 用途查看计算机信息查看内核状态查看运行中的进程信息运行中改变系统设置驱动调试查看 proc文件系统 60 proc文件系统 cat proc cpuinfoCPUcat proc interrupts中断cat proc ioports设备IO端口cat proc meminfo内存信息cat proc partitions所有设备的所有分区cat proc pciPCI设备的信息cat proc swaps所有Swap分区的信息cat proc versionLinux的版本号uname a看系统内核等信息 61 最基本的网络管理 netconfig 进行网络配置改动的是 etc sysconfig network scripts ifcfg eth ping 用于网络检测 ifconfig 网络配置和网络参数查看 ifconfignetstat查看网络状况 62 如果你碰到这些问题 实际使用中需要两台机器 但是现实太残酷 只有一台配置较好的机器 怎么办 需要同一时间使用两个操作系统 如一个Windows和一个Linux 怎么办 如果你想安装一个不熟悉的操作系统 但是对于硬件 特别是硬盘 的操作不熟悉时 为了防止损坏数据 怎么办 其他问题 63 常用服务器 Apache 外部服务器 usr local apache conf 目录下 三个配置文件httpd conf access conf和srm conf 来配置Apache服务器的行为 httpd conf提供了最基本的服务器配置 是对守护程序httpd怎么样运行的技术描述 srm conf是服务器的资源映射文件 FTPSambaNFSSSHD 网络文件系统 TelnetdDHCPNamedSendmail 64 如何配置文件共享服务 Samba 1 检查Samba服务是否打开 65 点击系统设置 选择服务器设置 最后选择服务 检查samba是否打开 如勾上 就代表打开了 如没有就把smb勾上 再点击 重启 66 如何打开tftp服务 67 如何打开NFS服务 网际文件共享 如samba 68 软件安装 1 获取源码包2 配置编译选项3 编译4 安装通常软件会给出自己的安装说明 tarxvfzaaa tar gz cdaaa configure make makeinstall 69 RPM RPM是RedhatPackageManager的缩写 是由RedHat公司开发的软件包安装和管理程序 RPM虽然是为Linux而设计的 但是它已经移植到SunOS Solaris AIX Irix等其它UNIX系统上了 70 RPM的使用 两种类型的RPM包srcrpm与二进制rpm 前者含有项目的源代码 后者主要为项目的可执行程序 如 tftp 0 28 2 src rpmtftp 0 28 2 i386 rpm项目名 版本号 修改次数 rpm包类型 rpm 71 rpm命令的使用 rpm命令的基本模式安装 rpm i查询 rpm q验证 rpm V删除 rpm e制作 rpm b一般选项 v显示信息 h用 显示完成的进度 vv显示调试信息 72 常用的命令形式 以tftp软件包tftp 0 28 2 i386 rpm为例安装一个软件包rpm ivhtftp 0 28 2 i386 rpm卸载一个软件包rpm etftp查询一个包内的信息rpm qiqtftp 0 28 2 i386 rpm查询一个包内有哪些文件rpm qlqtftp 0 28 2 i386 rpm 73 常用的命令形式 查询一个包是否被安装rpm qtftp查询一个被安装包的信息rpm qitftprpm qltftp查询一个包是否被正确安装rpm Vtftp查询某个文件是被哪个包安装的rpm qfusr bin tftp 74 75 参考资料 Linux一句话精彩问答 Linux权威指南 第四版 MATTWelsh等著 洪峰译 精通Linux StanKelly Bootle著 电子工业出版社 Unix入门与提高 徐锦波朱文章 清华大学出版社 Linux入门到精通 ArmanDanesh著电子工业出版社 RPM命令大全 RichardStevens清华大学出版社 Unix网络编程 卷二进程间通讯 RichardStevens清华大学出版社 76 Thanks 谢谢 77 vi主讲老师 邓耀华 78 演示 用vi写一个 helloworld 过程 vihello c i inputsomectext 按ESC键 wq 79 Vi与VIM 什么是Vi VIM Vi Visual 操作过程中可以立即看到结果 VIM ViImproved 与Vi兼容 更适于程序员使用 在很多发行版中 VIM已经替代了Vi 80 启动和退出 如何启动和退出vi vim 启动 vi options filename w将编辑缓冲区的内容写入文件 wq保存文件并退出 w 强行写入 q 强行退出vi 不保存修改的内容w write q quit e 重新编辑 放弃缓冲区里的内容 81 编辑与非编辑模式 进入vi的初始模式是非编辑模式 操作模式 可以移动光标 删除 复制和粘贴内容如何进入编辑模式 在非编辑模式下输入i或a或o可以进入编辑模式 还有其他一些键 如何回到操作模式 按ESC 82 Vi的使用 新建文件 vi文件名编译 gcc ohello 要输出的文件名 hello c输出 文件名例如 hello 83 命令模式 如何进入命令模式 在操作模式下 输入 或 或 进入该模式 可以实现查找替代内容 读取 存档 退出等功能 如何退出命令模式 执行命令即自动退出命令模式 回到操作模式 84 模式之间的转换 ESC i I a Ar R o O 编辑模式 指令列命令模式 操作模式 85 编辑方式 a将输入文本插入在光标之后 append A将输入文本插入在当前行的行尾i将输入文本插入在光标之前 insert I将输入文本插入在当前行的开始o将在当前行的下一行处打开一新行 open O将在当前行的上一行处打开一新行r替换当前字符 不需按ESC replace R从当前字符开始进行替换 至ESC键为止 86 剪切 复制 粘贴 如何剪切一行 dd delete 如何复制一行 yy yank 如何粘贴 p或者P paste 剪切和复制n行 nddnyy 87 有很多细节 如以y与Y命令为例yy复制当前行 nyw复制从当前字符开始的n个字 ny 复制从当前字符开始的n行字符 Y与y 同义 y 复制到下一句的开始 y 复制到下一段的开始 nyy复制从当前行开始的n行 y回车复制两行 88 光标的定位 或k向上移一行或j向下移一行或h左移一个字符或l右移一个字符CTRL f向前 上 移动一满屏幕 forward CTRL b向后 下 移动一满屏幕 backward CTRL d向前 上 移动半屏幕 down CTRL u向后 下 移动半屏幕 up 0移到当前行的开始 移到当前行的结尾回车符移到下一行的开始可在命令前加入数字n作为前缀 使相应命令执行n次 89 光标的定位 nG使光标定位在第n行 gg光标移动到文件的开头G光标移动到文件的结尾 0光标移动到文件的第1行 n光标移动到文件的第n行 光标移动到文件的最后一行 90 回顾 如何由编辑模式进入一般模式 按ESC如何移动到一行的开始和结尾 在一般模式下按0和 如何移动到文档的开头和结尾 移动到开头gg或 1 移动到结尾G或 91 回顾 如何向前或向后翻一页 PageDown PageUp Ctrl f Ctrl b检索和替换的命令格式 addr s s1 s2 option 如何undo和redo u ctrl r 92 参考文献 入门学习 VimTutor 运行vimtutor命令 最快捷的帮助 OnlineHelpDoc VimUserManualWebsites VIMhomepagehttp www vim org 水木社区VIM版 93 谢谢 94 Welcome Linux下的C C 编译器主讲老师 邓耀华 95 GCC编译器 96 示例 great c includevoidmain void printf hello howareyou n vick necgcc lab gcc ohellohello cgreat c Infunction main great c 3 warning returntypeof main isnot int 97 GCC GCC是什么 GCC GNUCompilerCollection GCC支持多种硬件平台和操作系统 能编译多种语言 C C Java Ada95 ObjectiveC ect GCC与G 的关系 GCC用于编译多种语言编写的程序 主要是C G 用于编译C 程序 以GCC为基础 编译过程中加入了C 的支持库 参数与GCC基本一致 可以利用GCC编译C 程序 但是需要在参数中加入引用的C 库 比如 libstdc 如gcc oout lstdc main cc 98 编译器与库 Preprocessor Compiler 前端 后端 Optimizer Assembler Linker o s a out c C预处理 汇编 优化 语法语义分析 代码生成 链接 GCC编译C源码步骤 预处理 编译 汇编 链接 99 后缀 cC源代码 hC头文件 o目标代码 obj s汇编代码文件C 文件 file hh file HC 头文件 file C file cc file cxx等C 源文件 100 选项 E输出预处理结果 输出终端 S输出汇编代码 great s c输出目标代码 great o ofile输出名为file的可执行文件名 缺省为a out O O2优化编译 g 产生可用于调试的输出 101 示例 gcc omain I include DDebug gmain c输出文件头文件搜索目录定义宏用于调试源文件 102 预处理 Pre processing 在该阶段 编译器将C源代码中的包含的头文件如stdio h编译进来 用户可以使用gcc的选项 E 进行查看 用法 gcc Ehello c ohello i作用 将hello c预处理输出hello i文件 103 root gcc Ehello c ohello i root lshello chello i root vihello i 1 hello c 1 1 1 hello c 1 usr include stdlib h 13 25 usr include stdlib h 3 1 usr include features h 13 291 usr include features h 3 1 usr include sys cdefs h 13 292 usr include features h 23 314 usr include features h 3 1 usr include gnu stubs h 13 315 usr include features h 23 26 usr include stdlib h 23 3 hello c 2voidmain void printf helloworld r n 104 编译阶段 Compiling 第二步进行的是编译阶段 在这个阶段中 Gcc首先要检查代码的规范性 是否有语法错误等 以确定代码的实际要做的工作 在检查无误后 Gcc把代码翻译成汇编语言 用户可以使用 S 选项来进行查看 该选项只进行编译而不进行汇编 生成汇编代码用法 root gcc Shello i ohello s作用 将预处理输出文件hello i汇编成hello s文件 105 root richardhello gcc lshello chello ihello s如下为hello s汇编代码 root richardhello gcc vihello s file hello c section rodata LC0 string helloworld r n text globlmain typemain functionmain pushl ebpmovl esp ebpsubl 8 espandl 16 espmovl 0 eaxsubl eax espsubl 12 esppushl LC0callprintfaddl 16 espmovl 0 eaxleaveret Lfe1 sizemain Lfe1 main ident GCC GNU 3 2 220030222 RedHatLinux3 2 2 5 106 汇编阶段 Assembling 汇编阶段是把编译阶段生成的 s 文件转成二进制目标代码 选项 c用法 root gcc chello s ohello o作用 将汇编输出文件test s编译输出test o文件 root gcc chello s ohello o root lshello chello ihello ohello s 107 链接阶段 Link 在成功编译之后 就进入了链接阶段 无选项链接用法 root gcchello o ohello exe作用 将编译输出文件hello o链接成最终可执行文件hello exe root lshello chello exehello ihello ohello s 108 运行该可执行文件 出现正确的结果如下 root localhostGcc helloHelloWorld 在这里涉及到一个重要的概念 函数库 程序中并没有定义 printf 的函数实现 且在预编译中包含进的 stdio h 中也只有该函数的声明 而没有定义函数的实现 那么 是在哪里实现 printf 函数的呢 系统把这些函数实现都被做到名为libc so 6的库文件中去了 在没有特别指定时 gcc会到系统默认的搜索路径 usr lib 下进行查找 也就是链接到libc so 6库函数中去 这样就能实现函数 printf 了 而这也就是链接的作用 109 你可以用ldd命令查看动态库加载情况 root lddhello exelibc so 6 lib tls libc so 6 0 x42000000 lib ld linux so 2 lib ld linux so 2 0 x40000000 110 与库和路径相关选项 lname链接库文件名为libname a或libname so的库 Idir在dir这个目录寻找被include的文件 Ldir在dir这个目录寻找被 L的库 111 Thanks 谢谢 112 Makefile主讲老师 邓耀华 113 想一想 一个工程含有20个 c文件 18个 h文件 每次改完程序 比如说改动了一个头文件1 h 重新将20个文件编译一次 还是说只编译含有1 h的那个文件 如果选前者 当工程增加到100个文件 每编译一次等待的时间是否可以容忍 如果选后者 要记住哪个 c包含了1 h 如果记漏了 会出现什么情况 114 make和makefile 在shell的提示符号下 键入 make 则它会到当前的目录下先后找寻 makefile 和 Makefile 文件 并按该文件所记录的规则执行相应的动作 make与makefile的作用自动化 一条命令均可灵敏 只涉及新变动的部分管理作用 管中窥豹 115 一个简单的makefile CC gcc 定义变量 CC 将gcc赋值给CC foo foo c 规则 CC ofoofoo c 这一行 必须使用一个tab字符 应用变量 完成编译 保存为makefile 在shell命令下输入make命令即可使用 myprog foo obar ogccfoo obar o omyprogfoo o foo cfoo hbar hgcc cfoo c ofoo obar o bar cbar hgcc cbar c obar o 116 makefile基本内容 1 解释与续行任何以 为开头的文字皆为解释 需要续行时键入 字符 然后紧跟回车 2 变量 或宏 variableormacro 如 CFLAGS Wall O g3 规则 由目标 依赖和命令组成 target prerequisites 依赖 这里必须按Tab键 command 这里必须是一个tab键导致的空白 117 make的行为准则 1 make把第一个目标做为其最终目标 如果在make调用时指定目标 就以指定的目标为最终目标 如makeclean 然后处理含有这个目标的规则 2 处理规则 如果规则的目标不存在或存在但比依赖中的某个旧 则执行规则中的命令 注意 在查看目标是否存在或查看依赖是否比当前新之前 先看看依赖中的每一项 本身是不是某条规则的目标 如果是 先处理那条规则 118 一个简单的makefile make把第一个目标 myprog 做为其主要目标1 比较myprog的第一个依赖foo o是否比myprog新 比较之前 先查找foo o是否为其它规则的目标 2 找到关于foo o的规则 该文件的依赖文件是foo c foo h和bar h3 再找这些依赖是否为别的规则的目标 找不到 开始检查这些依赖文件是否比foo o新 如果这些文件中任何一个的修改时间比foo o的新 命令 gcc ofoo ofoo c 将会执行 从而更新文件foo o 如果找不到 则不动作 4 处理第二个依赖bar o 5 处理完foo o和bar o 然后比较看是否比myprog新 如果 myprog 不存在 或者存在但比文件 foo o 或 bar o 中的任何一个旧 则执行gccfoo obar o omyprog 如果不新 不动作 119 使用变量替换 OBJS foo obar oCC gccCFLAGS Wall O g o o1 o2 o3表示优化的级别 o是最小 o3最高 myprog OBJS CC OBJS omyprogfoo o foo cfoo hbar h CC CFLAGS cfoo c ofoo obar o bar cbar h CC CFLAGS cbar c obar o 先编译bar文件 等效于 gcc Wall o g cbar c obar o 120 使用内建变量 当前规则的目标 当前规则的第一个依赖 当前规则的所有依赖 当前规则中所有比目标新的依赖 stemwhichanimplicitrulematchesfoo o foo cfoo hbar h foo o foo c foo cfoo hbar h bar h 假设只改了bar h 121 使用内建变量 OBJS foo obar oCC gccCFLAGS Wall O g 所有警告信息 优化 调试 myprog OBJS CC o 当前规则的目标 表示输出的是myprog foo o foo cfoo hbar h CC CFLAGS c o bar o bar cbar h CC CFLAGS c o 122 谢谢 123 Welcome GDB主讲老师 邓耀华 124 GDB概述 GDB GNUDebugger 是Linux Unix下强大的程序调试工具 在被监控的环境下运行程序 可以为程序设置断点 使程序运行期间暂停 检查程序的运行状态 动态改变程序的运行环境很多图形调试工具诸如DataDisplayDebugger DDD 是使用gdb作为后台来工作的 125 GDB使用基础 编译程序编译选项中加入 g参数 并且不要使用优化参数 O或 O2如 gcc gexel c oexel启动GDB方法1 gdbexel方法2 gdb gdb fileexel方法n 启动程序 利用r或run命令如何退出gdb gdb quit 126 断点 设置断点breakfunclbreak35breaktest c 18breaktest c func2查看中断信息infobreak条件中断break5ifi 7带条件中断condition1i 9更改条件condition1清除条件 127 vick necgdb lab catmoon c n includevoidgoto the moon intary inti for i 0 i 100 i ary i i intmain inti ary 100 for i 0 i 10 i printf i d r n i goto the moon ary return0 vick necgdb lab gccmoon c g omoon 128 GDB调试方法 单步调试程序step 单步调试next 单步调试 但不进入要调用的函数until 运行程序直到退出循环体finish 运行程序直到从函数返回returnvalue 停止函数运行 返回valuestepi nexti 机器指令的单步调试 129 vick necgdb lab gdbmoon q gdb break12Breakpoint1at0 x80484b0 filemoon c line12 gdb breakgotothe moonBreakpoint2at0 x8048466 filemoon c 1ine5 gdb rStartingprogram home vick aka gdb lab moonBreakpoint1 main atmoon c 1212printf i d r n i gdb ni 011for i 0 i 10 i gdb nBreakpoint1 main atmoon c 1212printf i d r n i gdb 130 gdb clear12Deletedbreakpoint1 gdb infobreakNumTypeDispEnbAddressWhat 2breakpointkeepy0 x08048466ingoto the moonatmoon c 5 gdb ni 111for i 0 i 10 i gdb untili 2 i 913gotothemoon ary gdb 131 gdb cContinuing Breakpoint2 goto the moon ary oxbffff8b0 atm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年玉溪市江川区人民医院等招聘真题
- 中级财务会计学(下)(山东联盟)225知到智慧树答案
- 中外歌剧鉴赏知到智慧树答案
- 中外音乐鉴赏知到智慧树答案
- 医学心理伦理学考试模拟题(附答案)
- 老年护理模拟习题(附答案)
- 2025东莞企业高级管理人员劳动合同范本
- 2025独家旅游度假广告代理合同范本助力市场拓展
- 突发事件报道规范-洞察及研究
- 2025年房建泥工班组劳务分包及建筑节能材料研发合作合同
- 2025年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 幼儿园安全责任书及后勤管理制度
- 消防车辆事故课件
- 《2型糖尿病中医防治指南(2024版)》解读课件
- 剑阁县普安镇污水处理厂扩容建设项目环评报告
- 商务楼宇管理办法
- 肺炎护理试题填空及答案
- 中国兽药典三部 2020年版
- DB32T 4252-2021 民用建筑燃气安全规范
- ISO45001职业健康安全管理体系手册和程序文件
- 《区域大地构造学》全套教学课件
评论
0/150
提交评论