AIX环境C语言编程简介

AIX环境C语言编程基础

UNIX系统的内核主要由C语言编写
在AIX下进行C编程,最通用的编辑器为vi/vim
选择编译器:常用的是GNU C/C++编译器 GCC (开源的跨平台编译器套件);XLC(AIX的商业版本编译器)
选择调试器:应用最广泛的调试器是gdb (UNIX下用dbx)
程序维护工具:make是Linux/Unix下常用的程序维护工具
AIX需要首先安装Linux RPM格式支持,才能安装gccRPM for AIX软件包
CentOS安装gcc编译器和gdb调试器
– yum install gcc gdb

GCC编译器简介

目前Linux/Unix下最常用的C语言编译器是GCC(GNUCompiler Collection,GNU编译器套装)
GCC是一套由GNU计划开发的编程语言编译器,开源自由软件,GNU计划的关键部分,类Unix系统及Mac OS X系统的标准编译器,被认为是跨平台编译器的事实标准
GCC是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。
GCC之所以被广泛采用,还因为它能支持各种不同的目标体系结构。目前,GCC支持的体系结构有四十余种,常见的有X86系列、ARM、PowerPC等。同时,GCC还能运行在不同的操作系统上,如Linux、Solaris、Windows等。

GCC编译程序时,编译过程可以被细分为四个阶段:
(1)预处理(Pre-Processing)
(2)编译(Compiling)
(3)汇编(Assembling)
(4)链接(Linking)

在这里插入图片描述

1.预处理阶段
主要处理C语言源文件中的#ifdef、#include、以及#define等命令,gcc会忽略掉不需要预处理的输入文件,该阶段会生成中间文件*.i。
预编译hello.c程序,将预编译结果输出到hello.i,执行的GCC命令:
$ gcc -E hello.c -o hello.i
在该阶段,编译器将上述代码中的stdio.h编译进来。GCC首先调用cpp进行预处理,根据以字符#开头的命令修改原始的C程序。
如hello.c中的指令#include <stdio.h>告诉预处理器读系统头文件stdio.h的内容,并把它直接插入到程序文本中去,结果就得到经过编译预处理的源代码hello.i。

2.编译阶段
输入的是中间文件*.i,编译后生成的是汇编语言文件*.s
编译hello.i文件,编译后生成汇编语言文件hello.s,执行的GCC命令:
$ gcc -S hello.i -o hello.s
在该阶段,GCC调用cc1检查代码的规范性,是否有语法错误等,以确定代码实际要做的工作,在检查无误后,把代码翻译成汇编语言,生成汇编处理后的汇编代码hello.s。

3.汇编阶段
是将输入的汇编语言文件转换为目标代码,可以使用-c选项完成
将汇编语言文件hello.s转换为目标程序hello.o,执行的GCC命令为:
$ gcc -c hello.s -o hello.o
在该阶段,GCC调用as把编译阶段生成的hello.s文件转成编译后的目标文件hello.o,但hello.c中所引用的其他文件中函数(如printf)的内存位置尚未定义。

4.链接阶段
将生成的目标文件与其他目标文件连接成可执行的二进制代码文件
将目标程序test.o连接成可执行文件test,执行的GCC命令为:
$ gcc hello.o -o hello
GCC调用ld将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。如GCC找到hello.c所调用的函数printf函数库所在位置/usr/lib,把函数的实现链接进来,生成最终的可执行文件hello

GCC编译器的选项

在这里插入图片描述
在这里插入图片描述

程序调试工具gdb

在Unix/Linux系统中,调试工具为gdb,它可以调试C和C++程序。通过调试可以找到程序中的bug。它使程序开发者能在程序运行时观察程序的内部结构和内存使用情况
gdb提供如下功能:
(1)运行程序,设置所有的能影响程序运行的参数和环境
(2)控制程序在指定的条件下停止运行(设置断点)
(3)当程序停止时,可以检查程序的状态
(4)修改程序的错误,并重新运行程序
(5)动态监视程序中变量的值
(6)可以单步逐行执行代码,观察程序的运行状态
(7)分析崩溃程序产生的core文件

gdb调试时的常用命令
在这里插入图片描述
在这里插入图片描述

程序维护工具make

make的工作机制
make的主要功能自动检测一个大型程序的哪一部分需要重新编译,然后发出命令重新编译。GNC的make的工作过程如下:
(1)依次读入每个makefile文件;
(2)初始化文件中的变量;
(3)推导隐式规则,并分析所有规则;
(4)为所有目标文件创建依赖关系链;
(5)根据依赖关系和时间数据,确定哪些文件需要重新生成;
(6)执行相应生成命令。

小结

AIX下进行C语言编程要使用vi,gcc,gdb,make等工具
GCC是一个开源的编译器,是类Unix系统的标准编译器
GCC编译程序分为预处理、编译、汇编、链接四个阶段
GCC编译器有很多选项可以控制编译的过程
gdb是应用最广泛的调试器,提供了很多子命令进行调试
make是Linux/Unix下最常用的程序维护工具

习题

1、在UNIX/LINUX系统中,什么是用户态,什么是内核态?
当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。
当一个程序执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)。

2、gcc编译过程一般分为哪几个阶段?各阶段的主要工作是什么?
一.预处理阶段
在该阶段,编译器将上述代码中的stdio.h编译进来。GCC首先调用cpp进行预处理,根据以字符#开头的命令修改原始的C程序。

二.编译阶段
在该阶段,GCC调用cc1检查代码的规范性,是否有语法错误等,以确定代码实际要做的工作,在检查无误后,把代码翻译成汇编语言,生成汇编处理后的汇编代码hello.s。

三.汇编阶段
在该阶段,GCC调用as把编译阶段生成的hello.s文件转成编译后的目标文件hello.o,hello.c中所引用的其他文件中函数(如printf)的内存位置尚未定义。

四.链接阶段
GCC调用ld将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。如GCC找到hello.c所调用的函数printf函数库所在位置/usr/lib,把函数的实现链接进来,生成最终的可执行文件hello

3、简述GNU gdb的功能。
(1)运行程序,设置所有的能影响程序运行的参数和环境
(2)控制程序在指定的条件下停止运行(设置断点)
(3)当程序停止时,可以检查程序的状态
(4)修改程序的错误,并重新运行程序
(5)动态监视程序中变量的值
(6)可以单步逐行执行代码,观察程序的运行状态
(7)分析崩溃程序产生的core文件

4、makefile文件的有什么作用?它的书写规则是什么?
要用make维护一个程序,必须创建一个makefile文件,makefile文件告诉make以何种方式编译源代码和链接程序。
makefile有自己的书写格式、关键字、函数,makefile描述规则组成如下所示。
目标:依赖文件
命令

目标:依赖文件
命令

(内容来自湖南大学肖老师的PPT)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值