实验二Linux下C语言开发环境及程序调试 (1)

合集下载

2-Linux下c语言开发环境

2-Linux下c语言开发环境

实验二:Linux下c语言开发环境实验目的熟悉Linux下的C语言开发环境及流程;熟练掌握Vi、GCC、GDB及Make等工具的使用;理解makefile的作用及规则;实验设备硬件:PC;软件:VMware Workstation 虚拟机和Red Hat Enterprise 5.0操作系统;实验预习要求熟悉Linux下C语言开发流程;掌握V i编辑器的使用;掌握GCC编译器的使用;掌握GDB调试器的使用;Make工程管理器;实验内容1.Linux下c语言开发流程;2.Vi和Vim编辑器的使用;3.GCC编译器的使用;4.GDB调试器的使用;5.Make工程管理器的使用;实验步骤1.Linux下c语言开发流程Linux下进行C语言开发时,单个.C文件需经历编辑、预处理、编译、汇编、链接等过程才可转换成二进制目标文件,其过程如图2-1所示,一般多数格式为ELF。

对于多个C源文件组成的项目,淡化文件与文件之间存在依赖关系,减少编译时间,提高编译效率,方便半自动化编译过程,提供makefile文件,使用make可方便完成项目编译、安装、卸载等工作。

图2-1 Linux 环境下C 源程序编译过程2.Vi/Vim 编辑器的使用Vim 是Vi 编译器的增强版本,一般Linux 发行版本中均以此工具为默认编译器。

为提高编辑速度,Vi/Vim 提供三种模式:命令模式、插入模式和底行模式,其间切换方法与对应模式作用如图2-2所示。

图2-2 Vi/Vim 工作模式切换图a. 在“/root ”目录下建一个名为“/V i ”目录下。

mkdir /root/V ib. 进入“/Vi ”目录。

cd /root/V ic. 将文件“/etc/inittab ”复制到“/Vi ”目录下。

cp /etc/inittab ./d .使用V i 打开“/Vi ”目录下的inittab 。

autotoolsgdbgccmake-E-S-c-oVi ./inittabe.设定行号,指出设定initdefault的所在行号。

linux c语言开发实例

linux c语言开发实例

linux c语言开发实例Linux C语言开发实例Linux C语言开发是一种常见的开发方式,它能够为Linux操作系统编写高效的、可靠的和安全的应用程序。

通过使用C语言进行Linux开发,我们可以充分利用Linux操作系统的优势,从而创建出功能丰富且高性能的软件。

本文将以Linux C语言开发实例为主题,介绍一些常见的Linux C语言开发实例,帮助读者了解并掌握如何使用C语言进行Linux开发。

一、Linux C语言开发环境搭建首先,我们需要搭建Linux C语言开发环境。

在大多数Linux发行版中,C语言编译器已经预装在系统中,因此我们只需要使用以下命令安装所需的开发工具:sudo apt-get install build-essential这个命令会自动安装GCC编译器和其他必要的开发工具,如make和g++。

安装完成后,我们就可以开始编写C语言代码并进行Linux开发了。

二、Linux C语言开发示例1. 创建一个Hello World程序我们可以从创建一个简单的Hello World程序开始,这是每个新手学习C 语言的第一个例子。

打开一个文本编辑器,输入以下代码:c#include <stdio.h>int main(){printf("Hello World\n");return 0;}保存文件为hello.c。

接下来,我们需要通过命令行编译这个程序。

打开终端,输入以下命令:gcc -o hello hello.c这个命令将会使用GCC编译器将代码编译成可执行文件。

编译成功后,我们可以使用以下命令运行程序:./hello如果一切顺利,你将在终端中看到输出的"Hello World"。

2. 读写文件Linux C语言开发的另一个常见需求是文件操作。

我们可以使用C语言的标准文件操作函数来读取和写入文件。

c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000int main(){FILE *fp;char str[MAX_SIZE];打开文件fp = fopen("example.txt", "r");if (fp == NULL){printf("无法打开文件!\n");exit(1);}从文件中读取内容fgets(str, MAX_SIZE, fp);printf("文件内容:s", str);关闭文件fclose(fp);return 0;}上述代码将打开名为example.txt的文件,并从文件中读取内容。

Linux下C语言编程环境

Linux下C语言编程环境
Linux下C语言应用编程
一个简单的Makefile的例子
test:prog.o code.o gcc –o test prog.o code.o prog.o:prog.c code.h gcc –c prog.c –o prog.o code.o:code.c code.h gcc –c code.c –o code.o clean: rm –f *.o
Linux下C语言应用编程
Linux的诞生与发展
Linux是一个诞生于网络、成长于网络且成熟 于网络的奇特的操作系统。 Linux一开始是要求所有的源码必须公开,并 且任何人均不得从Linux交易中获利。然而这 种纯粹的自由软件的理想对于Linux的普及和 发展是不利的,于是Linux开始转向GPL,成 为GNU阵营中的主要一员。
Linux下C语言应用编程
gcc的使用格式
$ gcc [options][filenames] 其中filenames为所要编译的程序源文件。 当使用gcc时,gcc会完成预处理、编译、 汇编和连接。前三步分别生成目标文件, 连接时,把生成的目标文件链接成可执行 文件。gcc可以针对支持不同的源程序文 件进行不同处理,文件格式以文件的后缀 来识别。
Linux下C语言应用编程
一个带变量的Makefile的例子
OBJS=prog.o code.o CC=gcc test:${ OBJS } ${ CC } –o test ${ OBJS } prog.o:prog.c prog.h code.h ${ CC } –c prog.c –o prog.o code.o:code.c code.h ${ CC } –c code.c –o code.o clean: rm –f *.o Linux下C语言应用编程

操作系统实验1.2C编程与调试-发给学生

操作系统实验1.2C编程与调试-发给学生

实验二C编程与调试(一)实验目的学会和掌握C语言开发一个应用程序的全过程,包括编辑、编译、调试过程。

(二)实验器材linux平台。

(三)实验内容1.使用gcc编译一个示例程序。

方法一:Linux下编写C程序一般要经过的步骤。

(1)启动常用的编辑器,输入C源程序代码。

在自己的主文件夹下,右击-“创建文档”-“空文档”,或者单击“主菜单”-“附件”-“文本编辑器”,进入文本编辑环境,输入C源程序,保存并命名为hello.c。

注:如果是复制代码的话,要改“”符号的格式,否则会报错。

#include<stdio.h>int main(void){printf(“Hello world!\n”);return 0;}(2)编译源程序。

在自己的主文件夹下,单击“主菜单”-“系统工具”-终端,进入命令行。

用GCC编译器对C源程序进行编译,以生成一个可执行文件。

方法如下:gcc -o hello hello.c运行程序,输入如下命令:./hello方法二:编译过程分成几个步骤单独进行,并观察每步的运行结果。

(1)预处理阶段,使用-E参数可以让GCC在预处理结束后停止编译过程:gcc -E hello.c -o hello.i预处理结束后,stdio.h的内容将插入到文件里,其他当被预处理的宏定义也都做了相应的处理。

(2)编译阶段gcc -S hello.i -o hello.s上述命令将代码翻译成汇编语言。

(3)汇编阶段,将生成的.s文件转成.O的二进制目标文件。

gcc -c hello.s -o hello.o(4)连接阶段在成功编译后,就进入了连接阶段。

gcc hello.o -o hello完成连接后,gcc就可以生成可执行文件,运行程序,输入如下命令:./hello如果整个程序是由多个源文件组成的,相应地也就形成了多个编译单元。

假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序foo,可以使用下面这条命令:gcc foo1.c foo2.c -o foogcc总体选项列表后缀名所对应的语言-c 只是编译不链接,生成目标文件“.o”-S 只是编译不汇编,生成汇编代码-E 只进行预编译,不做其他处理-g 在可执行程序中包含标准调试信息-o file 把输出文件输出到file里-v 打印出编译器内部编译各过程的命令行信息和编译器的版本-I dir 在头文件的搜索路径列表中添加dir目录-L dir 在库文件的搜索路径列表中添加dir目录-static 链接静态库-llibrary 连接名为library的库文件2.使用gcc发现程序错误。

深圳大学Linux上C程序编译,调试和工程文件管理 实验报告,你懂的 (1)

深圳大学Linux上C程序编译,调试和工程文件管理 实验报告,你懂的 (1)

深圳大学实验报告课程名称:Linux操作系统实验项目名称:Linux上C程序编译,调试和工程文件管理学院:计算机与软件学院专业:软件工程指导教师:冯禹洪报告人:学号:班级:实验时间:2014/12/26实验报告提交时间:2014/12/27教务处制一、实验目标:熟悉Linux上C程序设计环境,包括以下内容:1. 联机帮助man命令2. 编译工具gcc的使用3. 熟悉使用gdb来调试程序4. 熟悉C工程文件的管理工具makefile二、实验环境与工件湖边Linux实验室Fedora 13三、实验内容与步骤1.动态库函数可以在多个应用程序之间共享,可以减少应用程序文件的容量和应用程序的装载时间。

因此,熟悉构建动态库可以提高软件的编写质量。

请跟随以下步骤构建动态库message,并用其编写程序、编译和运行。

(40分)1.1编写源程序message.c(见图1)和main.c(见图2)图1. message.c源程序图2.main.c源程序1.2用以下命令对message.c进行编译,其中,“-fPIC”选项是告诉gcc产生的代码不要包含对函数和变量具体内存位置的引用。

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

1.3以上命令将获得目标文件message.o,使用以下命令建立共享函数库message:1.4使用1.3获得的共享函数库来编译main.c文件1.5设置共享函数库搜索路径1.6运行程序并附上结果1.7构建静态可执行程序1.7.1$gcc –c message.c1.7.2$ar –crv libmsg.a message.o1.7.3$gcc –o main main.c –L./ -lmsg1.7.4$./main注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

1.8 运行以下两个命令并截图说明结果:$ldd goodbye $ldd main$ls –l goodbye main答:main和goodbye的不同点在于代码被载入的时刻不同。

Linux下c语言编程实验讲义

Linux下c语言编程实验讲义

课程名:Linux下c语言编程专业:08嵌入式系统工程专试验1:Linux系统基本shell指令试验2:gcc编译器与多文件交叉包含试验3:库文件的创建与使用试验4:linux系统程序调试-行列式求值程序试验5:进程与线程程序调试试验6:TCP程序与试验7:UDP程序试验1 Linux系统基本shell指令实验一Linux系统基本文件操作试验目的:掌握Linux系统常见的文件操作指令;掌握Linux系统常见的文件形式;试验设备PC机、虚拟机、redhat9,桌面环境KDE试验原理一、Linux系统常见的文件形式(一)为便于用户识别文件形式,操作系统一般使用扩展名来标示文件类型。

文件扩展名是文件名的最后一个点之后的部分(在文件sneakers.txt中,“txt”是文件的扩展名)。

下面简单列出了一些文件扩展名和它们的含义:1. 压缩的和归档的文件.bz2 —使用bzip2 压缩的文件.gz —使用gzip 压缩的文件.tar —使用tar(tape archive,磁带归档的简写)压缩的文件,又称tar 文件.tbz —用tar 和bzip 压缩的文件.tgz —用tar 和gzip 压缩的文件.zip —使用ZIP 压缩的文件,在MS-DOS 应用程序中常见。

多数为Linux 压缩的文件使用gzip 压缩,因此Linux 文件中的.zip 归档较少见。

2. 文件格式.au —音频文件.gif —GIF 图像文件.html/.htm —HTML 文件.jpg —JPEG 图像文件.pdf —文档的电子映像;PDF 代表Portable Document Format(可移植文档格式).png —PNG 图像文件(Portable Network Graphic 的简写,可移植网络图形).ps —PostScript 文件,为打印而格式化过的文件.txt —纯ASCII 文本文件.wav —音频文件.xpm —图像文件3. 系统文件.conf —一种配置文件。

Linux下C语言程序的编译与调试实验报告

Linux下C语言程序的编译与调试实验报告

Linux下C语言程序的编译调试实验学院:电子信息工程学院专业:通信工程*名:***学号:********指导老师:周围老师完成时间:2013年6月3日一、实验目的1. 熟悉Linux下C语言编译调试环境。

2. 学会使用gcc编译C程序。

3. 学会使用gdb调试C程序。

二、实验内容1. 在Linux下,编写程序factorize.c,功能如下:输入一个int型整数,输出其因式分解结果。

2. 编译运行,生成可执行文件。

3. 用gdb调试该程序,找到错误并修改。

三、实验软件环境GCCGCC(GNU Compiler Collection,GNU编译器集合)是一套由GNU工程开发的支持多种编程语言的编译器。

GCC是自由软件发展过程中的著名例子,由自由软件基金会以GPL协议发布。

GCC是大多数类Unix操作系统(如Linux、BSD、Mac OS X等)的标准的编译器,GCC同样适用于微软的Windows。

GCC支持多种计算机体系芯片,如x86、ARM,并已移植到其他多种硬件平台。

GCC原名为GNU C编译器(GNU C Compiler),因为它原本只能处理C语言。

GCC很快地扩展,并支持处理C++。

后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go等。

GDBGDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。

所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。

(断点可以是条件表达式)。

3、当程序被停住时,可以检查此时你的程序中所发生的事。

1.实验一Linux下的C语言编程环境(上)

1.实验一Linux下的C语言编程环境(上)

1. 实验一:Linux下的C语言编程环境(上)
(1)编辑器vi的使用
(2)编译器gcc的使用
2. 实验二:Linux下的C语言编程环境(下)
(1)make和Makefile的应用
(2)gdb的使用
3. 实验三:Linux下的文件编程
(1)文件基本I/O操作
(2)文件高级操作
4. 实验四:基于流的标准I/O操作
(1)读和写流
(2)流文件的定位
5. 实验五:进程操作
(1)进程创建
(2)exec函数
6. 实验六:进程间通信(上)
进程间使用信号和管道进行通信
7. 实验七:进程间通信(下)
进程间使用消息队列、信号量、共享内存进行通信(实验中可用消息队列作为这3种的代表)
8. 实验八:线程操作
线程的创建与同步
9. 实验九:网络编程
数据流套接字的编程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二Linux下C语言开发环境及程序调试
一、实验目的
1、熟悉Linux下的C语言程序编译流程。

2、掌握vi、gcc、gdb的使用。

二、实验设备
硬件:PC机。

软件:VMware Workstation虚拟机、Linux操作系统。

三、实验预习要求
1、gcc编译过程及常用编译选项。

2、gdb调试器使用流程,查看文件、设置断点、单步运行等gdb基本命令的使用。

四、实验内容及步骤
1、Linux下C语言开发流程及GCC编译器的使用。

(1)启动虚拟机,进入Linux操作系统,然后启动终端。

(2)使用Vim编辑源程序,练习命令模式、编辑模式、底行模式之间的切换,在终端中输入vi hello.c,编辑完成后存盘。

(注:代码自己编写)(3)练习以下编译选项的使用:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.S
gcc -c hello.S -o hello.o //目标文件
gcc hello.o -o hello //可执行文件
(4)运行程序,在终端中查看程序运行结果。

2、GDB调试器的使用。

使用Vim编辑源程序,在终端中输入vi test.c,输入如下源代码,编辑完成后存盘。

此代码的功能为输出倒序main函数中定义的字符串,但结果没有输出显示,现通过调试的方式来解决程序中存在的问题。

程序源代码如下:#include <stdio.h>
int display1 (char *string)
int display2 (char *string1)
int main ()
{
char string[] = "Embedded Linux";
display1 (string);
display2 (string);
}
int display1 (char *string)
{ printf ("The original string is %s \n", string);
}
int display2 (char *string1)
{
char *string2;
int size,i;
size = strlen (string1);
string2 = (char *) malloc (size + 1);
for (i = 0; i <= size; i++)
string2[size - i] = string1[i];
string2[size+1] = ' ';
printf("The string afterward is %s\n",string2);
}
(1)用Gcc编译:gcc -g greet.c -o greet。

(2)运行greet:./greet,查看输出结果是否正确。

(3)启动Gdb调试:gdb greet
查看源代码:l
在30行(for循环处)设置断点:b 30
在33行(printf函数处)设置断点:b 33。

查看断点设置情况:info b
运行代码:r
单步运行代码:n
查看暂停点变量值:p string2[size - i]
继续单步运行代码数次,并使用命令查看,发现string2[size-1]的值正确
继续程序的运行:c
程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,找到程序运行结果不正确的原因。

退出Gdb:q
将程序修改正确并使用Gcc重新编译,查看运行结果:./greet
五、可选题
编程实现输入任意2个小于100的正整数a和b,然后输出100以内能同时整除a和b的所有数,并使用gcc和gdb编译和调试。

六、实验报告要求
认真记录调试过程和所有调试的程序代码。

相关文档
最新文档