linux下C语言使用编译与调试试验
- 格式:doc
- 大小:299.00 KB
- 文档页数:12
实验1 linux c语言编程实践一、实验目的1.掌握Linux环境下C程序的编辑、编译、运行等操作;2.掌握多文件的编译及连接;3.初步掌握gdb调试方法;二、实验任务与要求1.在Linux环境下C程序的编辑、编译与运行;2.多文件的编译及连接;3.应用gdb调试程序;三、实验工具与准备计算机PC机,Linux Ubuntu操作系统四、实验步骤与操作指导1.调试下列程序。
程序通过创建一个小型函数库,它包含两个函数,然后在一个示例程序中调用其中一个函数。
这两个函数分别是pro1和pro2。
按下面步骤生成函数库及测试函数库。
步骤1 为两个函数分别创建各自的源文件(将它们分别命名为pro1.c和pro2.c)。
[root@localhost root]# vi pro1.c#include <sdtio.h>void pro1(int arg){printf(“hello:%d\n”,arg) ;}[root@localhost root]# vi pro2.c#include <sdtio.h>void pro2(char *arg){printf(“您好:%s\n”,arg) ;}步骤2 分别编译这两个文件,生成要包含在库文件中的目标文件。
这通过调用带有-c 选项的gcc编译器来实现,-c选项的作用是阻止编译器创建一个完整的程序,gcc将把源程序编译成目标程序,文件名为以.o结尾。
如果此时试图创建一个完整的程序将不会成功,因为还未定义main函数。
[root@localhost root]# gcc -c pro1.c pro2.c[root@localhost root]# ls *.opro1.o pro2.o步骤3 现在编写一个调用pro2函数的程序。
首先,为库文件创建一个头文件lib.h。
这个头文件将声明库文件中的函数,它应该被所有希望使用库文件的应用程序所包含。
实验二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操作系统实验项目名称: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语言编译和调试方法解析摘要:文章先介绍了GCC编译器相关内容,包括GCC编译程序和GCC编译选项,随后介绍了GDB调试程序相关内容,包括GDB具体操作和GDB基础命令,最后介绍了C语言编写中的注意事项,希望能给相关人士提供有效参考。
关键词:Linux操作系统;C语言编译;调试方法引言:C语言拥有较强的表达能力、应用范围较广、功能丰富,同时目标程序的运行效率相对较高,拥有良好的可移植性,不但拥有高级语言应用优势,同时还兼具低语言特征。
为此C语言也是当下推广速度最快的计算机语言。
一、GCC编译器(一)GCC编译程序Linux OS系统中应用的C编译器主要是GCC编译器,如果初步了解其他控制系统中的某种C编译器,则便会快速掌握GCC操作。
结合相关编辑软件编制完成某一C语言源程序后,会直接进入下面几项环节,分别是程序运行、连接、开展编译工作、程序输入等。
比如在设计C源程序的filel.c时,通过编译后可以或得filel.o的目标文件,并和系统中的库函数实施有效连接,最终获得filel.out可执行文件,并开始启动filel.out文件运行。
GCC编译器执行命令的具体用法如下所示:GCC[选项][文件名]GCC编译程序中如果不存在任何选项的条件下,便会自动生成一种a.out可执行文件,比如以下命令会在现有目录下生成一种称作a.out的文件,相关文件名为gcc filel.c。
如果想要改变系统默认文件名a.out,在开展编译工作中相关技术人员可以自主指定相应的可执行文件名,从而对系统自动生成的a.out文件实施有效替换,比如可以把filel.c名字的C程序改编为filel.out名字的可执行文件,并按照下方命令参考输入:gcc-o filel.out filel.c。
操作中需要注意应用-0选项过程中,后面应该紧跟一种文件名[1]。
(二)GCC编译选项GCC编译选项多种多样,其中仅有少部分会频繁选用,除了相关选项之外,还包含各种不会经常应用的选项,为此可以输入man gcc,并查阅其应用方法。
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、当程序被停住时,可以检查此时你的程序中所发生的事。
pro1.o pro2.o步骤3 现在编写一个调用pro2函数的程序。
首先,为库文件创建一个头文件lib.h。
这个头文件将声明库文件中的函数,它应该被所有希望使用库文件的应用程序所包含。
[root@localhost root]# vi lib.h/*lib.h:pro1.c,pro2.c*/void pro1(int);void pro2(char *);步骤4 创建主程序program.c,它包含库的头文件并且调用库中的一个函数。
[root@localhost root]# cat program.c#include “lib.h”int main(){pro2(“Linux world”);exit(0);}步骤5 编译并测试程序。
暂时为编译器显式指定目标文件,然后要求编译器编译文件并将其与预先编译好的目标模块pro2.o链接。
[root@localhost root]# gcc -c program.c[root@localhost root]# gcc -o program program.o pro2.o[root@localhost root]# ./program您好:Linux world步骤6 创建并使用一个库文件。
用ar程序创建一个归档文件并将目标文件添加进去。
这个程序之所以称为ar,是因为它将若干单独的文件归并到一个大的文件中以创建归档文件。
注意,也可以用ar程序来创建任何类型文件的归档文件。
[root@localhost root]# ar crv libfoo.a pro1.o pro2.o函数库现在即可使用。
可以在编译器命令行的文件列表中添加该库文件以创建程序,如下所示:[root@localhost root]# gcc -o program program.o libfoo.a[root@localhost root]# ./program您好:Linux world也可以用“-l”选项来访问函数库,但是因为其未保存在标准位置,所以必须用-L选项来指示gcc在何处可以找到它,如下所示:[root@localhost root]#gcc -o program program.o -L. -lfoo-L.选项指示编译器在当前目录“.”中查找函数库。
实验4:Linux C语言编程和调试实验4:linuxc语言编程和调试实验报告4课程名称:linux基础实验名称:linuxc语言编程和调试学生姓名:班级:学号:指导老师:钱振江成绩:一、实验目的1.掌控linux环境之下c程序的编辑、编程、运转等操作方式;2.掌控多文件的编程及相连接;3.初步掌控gdb调试方法;二、实验任务与要求1.在linux环境之下c程序的编辑、编程与运转;2.多文件的编程及相连接;3.应用领域gdb调试程序;4.随机数的应用领域;三、实验工具与准备计算机pc机,linuxubuntu操作系统四、实验步骤与操作指导1.调试以下程序。
程序通过建立一个小型函数库,它涵盖两个函数,然后在一个示例程序中调用其中一个函数。
这两个函数分别就是pro1和pro2。
按下面步骤分解成函数库及测试函数库。
步骤1为两个函数分别创建各自的源文件(将它们分别命名为pro1.c和pro2.c)。
[root@localhostroot]#vipro1.c#includevoidpro1(intarg){printf(“hello:%d\\n”,arg);}[root@localhostroot]#vipro2.c#includevoidpro2(char*arg){printf(“您好:%s\\n”,arg);}步骤2分别编译这两个文件,生成要包含在库文件中的目标文件。
这通过调用带有-c选项的gcc编译器来实现,-c选项的作用是阻止编译器创建一个完整的程序,gcc将把源程序编译成目标程序,文件名为以.o结尾。
如果此时试图创建一个完整的程序将不会成功,因为还未定义main函数。
[root@localhostroot]#gcc-cpro1.cpro2.c[root@localhostroot]#ls*.o1pro1.opro2.o步骤3现在编写一个调用pro2函数的程序。
首先,为库文件创建一个头文件lib.h。
实验一:Linux常用命令、C语言使用、编译与调试实验内容:1、熟悉LINUX用户界面及常规设置。
2、熟悉LINUX 的常用基本命令如ls、who、w、pwd、ps、pstree、top 等。
3、用vi 编写一个简单的、显示"Hello,World!"的C 程序,用cc 编译并观察编译后的结果4、利用cc 调试该程序5、运行生成的可执行文件。
要求:1、了解Linux的命令及使用格式。
2、练习并掌握LINUX 提供的vi 编辑器来编译C 程序3、学会利用gcc(cc)编译、调试C 程序主要仪器:装有Linux系统的微机实验步骤:一、Linux命令Linux文件的复制、删除和移动命令cp命令、mv命令Linux目录的创建与删除命令mkdir命令、rmdir 命令、cd 命令、pwd 命令、ls 命令Linux文本处理命令sort命令、uniq命令Linux备份与压缩命令tar命令、gzip命令、unzip命令Linux与用户有关的命令passwd命令、su命令Linux系统管理命令wall命令、write命令、mesg指令、free命令Linux磁盘管理df命令、du命令、dd命令、fdformat 命令、echo命令、cal命令、date命令clear命令二、Linux下C语言使用、编译与调试实验输入vi helloworld.c进入编辑器按i 进入插入模式输入#include<stdio.h>int main(){printf("HelloWorld!\n");}按esc 输入:wq后回车完成编辑输入gcc -o helloworld helloworld.c然后输入./helloworld可查看程序运行的结果。
实验结果:。
辽宁工程技术大学上机实验报告成绩课程名称Linux程序设计实验题目实验2 Linux下C程序编译院系软件学院专业嵌入式软件工程班级09-2班姓名王翀学号0920010214实验日期2012-4-22实验目的1、熟悉嵌入式Linux系统(Red Hat)及集成开发环境;含交叉编译器arm-linux-gcc,并配置环境;2、熟悉Linux下的编辑器(vim),编译器(gcc),调试器(GDB);3、通过饱含多文件的makefile的编写,熟悉各种形式的makefile,并进一步加深对makefile中用户自定义变量、自动变量及预定义变量的理解。
实验准备1、装有虚拟机(VMware Workstation)和嵌入式Linux系统(Red Hat 9)的PC 机一台;2、XSBase270实验开发平台一套;3、认真阅读教材第二章节内容,练习课后2.7.3实验内容。
实验进度本次共有 2 个练习,完成 2 个。
实验内容【实验原理】(1)Makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取Makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.创建程序利用内置的推理规则来激活编译器,以便通过对特定cpp文件的编译来产生特定的obj文件。
(2)交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。
这种方法在异平台移植和嵌入式开发时非常有用。
实际上,GNU make工具通过一个称为Makefile的文件来完成对应用程序的自动维护和编译工作。