好文档 - 专业文书写作范文服务资料分享网站

实验五常用软件开发工具

天下 分享 时间: 加入收藏 我要投稿 点赞

精品文档

实验五、常用软件开发工具 一、实验目的

1、熟悉字符模式下的C程序编译和调试环境,基本掌握Linux字符模式下的编译工具和调试工具的使用; 2、本实验需要综合使用Linux基本文件命令、编辑器的使用,练习在Linux的字符模式下,编辑、编译及调试一个C程序的基本方法。 二、实验内容和步骤

1 gcc和 g++ 语言编译器

GCC是GNU Compiler Collection的缩写,它是世界上最为重要的开放源代码软件[18]。因为所有其他的开放源代码项目都依赖于GCC进行编译。比如,没有GCC,Linux的产生就不会成为可能。

GCC能工作在很多平台上,这里所说的平台是指计算机硬件芯片和运行在其上的操作系统的组合。下表是GCC运行的平台。 表 GCC运行的平台 硬件

操作系统

Alpha

Red Hat Linux 7.1 HPPA

HPUX 11.0

Intel x86

Debian Linux 2.2, Red Hat Linux 6.2, FreeBSD 4.5 MIPS

IRIX 6.5

PowerPC

AIX4.3.3

。 1欢迎下载

精品文档

Sparc

Solaris 2.7

GCC可以编译多种语言:C,C++,对象C(标准C的派生),Fortran,Java, Ada。正如GCC缩写所代表的对象一样,GCC实际上是多种编译器的统称,gcc是所有编译器的统一的程序接口,在本书中,并没有区分GCC和gcc。同时,GCC 也能够进行代码优化,提高执行程序的运行速度。g++是构建于 gcc 基础上的 C++语言编译器。 gcc 编译过程分为 4个阶段: l 预处理 l 编译 l 汇编 l 连接

最简单的C 语言编译的例子: 用 vi建立一个 hello.c文件 $vi hello.c

输入字符 i,插入文本以下文本 /*

* hello.c */

#include int main(void) {

printf(\ return 0; }

最后输入字符:wq,返回命令行,键入以下编译命令: $gcc hello.c (-lstdc++)

如果没有错误 gcc 将生成默认的可执行文件 a.out,执行 a.out: $./a.out Hello World! $

gcc 带有多达数页的编译选项,我们仅列出最常用的几项:

-o 可执行文件名 指定输出的可执行文件名,而不是默认的 a.out -c 只编译生成.o 的目标文件,不连接生成可执行文件 -s 只编译生成.s的汇编文件,不连接生成可执行文件 -g 在可执行文件中加入标准调试信息 -Wall 允许GCC发出警告型错误信息 选项使用的例子:

对以上 hello.c使用-o,-g 常用选项重新编译、执行: $gcc -g hello.c -o hello

。 2欢迎下载

精品文档

$./hello Hello World! $

GCC默认的扩展文件名: .c C 语言源代码

.C .cc C++语言源代码 .i 预处理后的 C语言源代码 .ii 预处理后的 C++语言源代码 .S .s 汇编语言源代码 .o 编译后的目标代码 .a .so 编译后的库代码

下面的例子由两个文件组成:main.c, calc.c,其中,main.c文件内容为: #include int calc(int);

int main(int argc, char* argv[]) {

int iInput=0, iOutput=0; int i=0;

scanf(\ while(iInput < 0) {

printf(\ scanf(\ }

iOutput = calc(iInput);

printf(\ return 0; }

calc.c的文件内容为: #include int calc(int iIn) {

int i = 0, iOut = 0; iOut = iIn;

for(i = 0; i < iIn; i++) {

iOut += iOut * iIn; }

return iOut; }

1、编译过程

有三种方式编译这两个源程序,一是直接使用如下命令行完成编译、链接过程: $gcc main.c calc.c -o main

。 3欢迎下载

精品文档

命令行中,main.c calc.c的后缀名指明了调用c编译器,前面讲到了gcc是GCC的众多编译器的统一入口,gcc靠后缀名决定调用什么编译器,-o 参数指定了可执行文件的文件名为main。

第二种方法是编译calc.c为静态库,编译main.c时指定静态库的位置。 需要将calc.c编译成中间文件calc.o,使用如下命令行: $gcc -c calc.c

生成静态库文件,添加calc.o到静态库中,使用如下命令行: $ar -r libcalc.a calc.o

命令行中,-r libcalc.a参数表示建立静态库,名字为libcalc.a。 接下来,使用如下命令行:

$gcc main.c libcalc.a -o main

上面这条命令也可以用下面的命令完成: $gcc main.c -lcalc –o main

-l参数可以指定库名称,这里calc表示使用库libcalc.a,库名字前面的lib和后面的.a被省略掉了,遵从了命名法。

第三种方法是建立共享库,编译时指定共享库。 首先,编译calc.c为calc.o,使用命令行: $gcc -c -fpic calc.c

命令行中,-fpic指定calc.o为可重分配地址属性,pic是position independence code的缩写。

接下来使用calc.o生成共享库calc.so: $gcc -shared calc.o –o calc.so 这两条命令也可以缩减为一行:

$gcc -shared -fpic calc.c -o calc.so 最后编译main.c,链接生成的共享库: $gcc main.c calc.so -o main 2 make项目管理器

make 项目管理器(GNU 中的名称为 gmake)可以根据项目开发者说明的项目开

发文件 Makefile 自动的进行编译配置和重复编译,能实现复杂项目的编译自动化。 项目开发文件 Makefile 的编写使用以下规则: 目标体 1: 依赖体 1 [依赖体2 [...]] 命令行 1 命令行 2 [...]

目标体 2: 依赖体 1 [依赖体2 [...]] 命令行 1 命令行 2 [...] [...]

其中目标体是命令行要生成的输出文件,依赖体是命令行要输入的文件或选项,命 令行序列是要创建目标体文件所需要的步骤,例如编译命令。无特别指定,make 总是使用当前目录中的 Makefile 进行自动编译。

例如我们在当前目录中有两个项目开发文件hello.c和hello.h,则Makefile文件可以 编写为:

。 4欢迎下载

精品文档

hello: hello.o

gcc hello.o -o hello hello.o: hello.c hello.h gcc -c hello.c clean:

rm hello *.o make 命令的使用: $g make

输入make或make hello将生成Makefile中所有的目标文件,即hello,hello.o,hello.s。 $g make hello.o

将仅生成目标文件 hello.o $g make clean

是一条伪目标生成命令,该目标没有依赖体,它只执行对已生成目标文件的删除。当我们对以上依赖体中的任意一个进行了修改,重新 make 时仅会引发对应目标体的重新生成,从而提高了编译的效率并保证了项目开发的正确性。 3 gdb程序调试器

GDB是GNU Project Debugger的缩写,用于调试Ada, C, C++, Objective-C, Pascal 和其他语言编写的程序[20],这些程序可以运行在本地计算机上,也可以运行在远程计算机上。GDB可以运行在几乎所有的UNIX和微软Windows平台上。 GDB主要能做下面4种事(以及由它们所支持的其他事情): 1)启动程序,指定可能影响程序运行的任何条件; 2)指定程序在一定条件下停止; 3)检查当程序停止时发生的事情;

4)通过改变程序中的某些条件,测试可能造成的软件错误,还可以由此学习其他的软件错误。

GDB可以做源代码级别的程序调试(需要在编译时指定相应条件),也可以做二进制级别的程序调试。

如果您在 gcc 编译选项中用到了-g 调试选项,则编译出的可执行文件就会带有符号表。这样的程序就可以使用 gdb 跟踪调试,观察到它的高级语言源代码的执行过程和变量的中间结果,从而能快速的排除程序运行时发生的错误。以下是一个带有运行时错误的C程序,注意程序想通过传地址方式在一个函数中为字符变量 C赋一个字符,但它引用了一个空指针,这将引发运行时的段非法错误使得程序异常终止。但我们可以通过 gdb 跟踪到它产生错误的位置,从而分析出产生错误的原因。 /*

* debugmy.c */

#include

void myputc(char * cptr) {

*cptr = 'a';

printf(\ }

int main(void) {

。 5欢迎下载

实验五常用软件开发工具

精品文档实验五、常用软件开发工具一、实验目的1、熟悉字符模式下的C程序编译和调试环境,基本掌握Linux字符模式下的编译工具和调试工具的使用;2、本实验需要综合使用Linux基本文件命令、编辑器的使用,练习在Linux的字符模式下,编辑、编译及调试一个C程序的基本方法。二、实验内容和步骤1gcc和g++语言编译器
推荐度:
点击下载文档文档为doc格式
7weoc8zizm37lyd0yjbf83hrt8bf1m008vp
领取福利

微信扫码领取福利

微信扫码分享