《Linux操作系统》实验十-UNIX gcc编译器的使用与编程环境
第二章 Linux下GCC程序开发环境PPT课件

gcc hello.c –o hello 如果没有错误返回则证明GCC已经安装,否则需要进 行手动安装。 也可以直接用指令检测:
$:gcc –version
输出根据版本不同而不同。
5
第二章 Linux系统下GCC编程开发环境
LOGO
Linux系统下GCC概述
1、概述 (2)GCC 安装 1)确认网络正常连接; 2)在终端界面中输入指令: sudo apt-get install build-enssential 或 sudo apt-get install gcc 3)中间需要输入两次或一次:Y后就会自动安装。 4)安装完毕用验证指令进行验证即可。
LOGO
14
第二章 Linux系统下GCC编程开发环境 GCC编译多个组合程序
1、编写多组合文件代码 3)编写主函数:helloTest.c /*主函数调用hello输出*/ #include "Mhello.h" int main(void) {
return helloOut(); }
LOGO
15
第二章 Linux系统下GCC编程开发环境
LOGO
GCC编译多个组合程序
2、编译测试 1)直接编译指令: $ gcc helloTest.c Mhello.c –o helloTest 2) 分别编译后再进行链接 $ gcc -c Mhello.c //将Mhello.c编译成Mhello.o #gcc -c helloTest.c //将helloTest.c编译成helloTest.o #gcc -o Mhello.o helloTest.o -o helloTest //将 Mhello.o和helloTest.o链接成helloTest
Linux实验指导 2010

《Linux内核与程序设计》实验指导实验一实验名称:常用命令和编辑器的使用一、实验目的1、掌握Linux一般命令格式2、掌握有关文件和目录操作的常用命令3、掌握有关进程操作的常用命令4、熟悉使用man命令5、学习使用vi编辑器的建立、编辑、显示及加工处理文本文件二、实验内容1、熟悉date、cal、who、echo、clear、passwd命令2、在用户主目录下对文件进行操作:复制一个文件、显示文件内容、查找指定内容、排序、文件比较、文件删除等3、对目录进行管理:创建和删除子目录、改变和现实工作目录、列出和更改文件权限、链接文件等4、利用man显示date、echo等命令的手册页5、利用文本插入方式建立一个文件6、对该文件执行删除、复原、修改、替换等操作三、主要实验步骤1、使用简单命令date、cal、who、echo、clear、passwd等,了解linux命令格式2、浏览文件系统:(1)运行pwd命令,确定当前工作目录(2)运行ls –l命令,理解各字段含义(3)运行ls –ai命令,理解各字段含义(4)使用cd命令,将工作目录改为根(/)上,运行ls –l命令,结合书中图2.2,了解个目录的作用(5)直接使用cd,回到哪里了?用pwd验证(6)用mkdir建立一个子目录subdir(7)将工作目录改到subdir3、工作操作(1)验证当前工作目录在subdir(2)运行date>file1,然后运行cat file1,看到什么信息?(3)运行cat subdir,会有什么结果?为什么?(4)利用man命令显示date命令的使用说明4、运行man date>>file1,看到什么?运行cat file1,看到什么?5.文件操作(1)显示file1的前10行,后10行(2)运行cp file file2,然后ls –l,看到什么(3)运行cat f*,结果怎样(4)运行rm file3,然后ls –l,结果如何(5)统计file1文件的行数、字数6.vi编辑器(1)进入vi(2)建立一个文件,如file.c.进入插入方式,输入一个C语言程序的各行内容,故意制造几处错误.最后,将该文件存盘.回到shell状态下.(3)运行gcc file.c –o myfile,编译文件,会发现错误提示.理解其含义(4)重新进入vi,对该文件进行修改.然后存盘,退出vi.重新编译该文件.如果编译通过了,可以用./myfile运行该程序(5)运行man date>file10,然后vi file10。
Linux系统下gcc编程的基本使用教程

Linux系统下gcc编程的基本使用教程1、什么是GCC和gcc?GCC是由GNU之父Stallman所开发的linux下的编译器,GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越多,其全称变为GNU Compiler Collection即GNU编译器集合。
目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java, and Ada。
gcc是则是GCC编译器集合下的c编译器。
(g++则是c++编译器)。
gcc编译器主要用于编译C和C++程序, 编译C++程序时通常使用g++命令, 实际上是gcc连接了libstdc++库。
我们主要了解一下gcc的使用。
2、gcc如何使用【1】使用环境首先使用gcc要在linux环境下,我们可以使用真正的linux系统(不过这么做可能有一些麻烦)或者使用一些windows下的虚拟软件,可以使用虚拟机搭建的linux环境,这样可以很方便的进行linux开发。
可以下载安装一个虚拟机软件,方法很简单和安装普通软件一样,安装linux系统有点麻烦,详情参考:Linux系统安装教程【2】文件命名规则在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。
而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则。
.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的库文件;.C,.cc或.cxx 为后缀的文件,是C++源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。
【3】编译过程gcc编译器在编译时, 都需要用四个步骤里的一个或多个处理输入文件, 这四个步骤是:预处理(Pre-Processing) 、编译(Compilation) 、汇编(Assembly) 、连接(Linking) 。
Linu 系统编程实验gccgdb的使用以及Makefile文件的编写

实验二:gcc、gdb、Makefile的使用●实验目的:(一)学会使用gcc编译器(二)学会gdb调试器的使用(三)学会编写Makefile●实验要求:(一)编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2等选项(二)编写一应用程序,使用gdb调试,调试中使用到该小节所介绍的所有命令(三)实现一应用程序,该程序有两个c文件构成,使用makefile来完成对该程序的编译●实验器材:软件:安装了Linux的vmware虚拟机硬件:PC机一台●实验步骤:(一)gcc编译器1、先用vi编辑hello.c文件,内容如下:2、gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件]例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello上面的命令一步由.c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作3、-E选项的作用:只进行预处理,不做其他处理。
例:只对hello.c文件进行预处理,生成文件hello.i,并查看通过查看可以看到头文件包含部分代码#include <stdio.h>经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。
4、-S选项的使用-S选项的作用:只是编译不汇编,生成汇编代码例:将hello.i文件只进行编译而不进行汇编,生成汇编代码hello.s5、-c选项的使用-c选项的作用:只是编译不连接,生成目标文件.o例:将汇编代码hello.s只编译不链接成hello.o文件6、将编译好的hello.o链接库,生成可执行文件hello7、-static选项的使用-static选项的作用:链接静态库例:比较hello.c连接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的8、-g选项的使用-g选项的作用:在可执行程序中包含标准调试信息例:将hello.c编译成包含标准调试信息的可执行文件hello2带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误9、-O2选项的使用-O2选项的作用:完成程序的优化工作例:将hello.c用O2优化选项编译成可执行文件hello3,和正常编译产生的可执行文件hello进行比较(二)gdb调试器1、先用vi编辑文件test.c用于gdb调试器调试,内容如下#include <stdio.h>int main(void){int sum(int sum);int i,result=0;sum(100);for(i=1;i<=100;i++){result+=i;}printf("The sum in main function is %d\n",result);return 0;}int sum(int num){int i,n=0;for(i=0;i<=num;i++){n+=i;}printf("The sum in sum function is %d\n",n);}2、将test.c文件编译成包含标准调试信息的文件test3、启动gdb进行调试可以看到gdb启动界面中显示了gdb的版本、自由软件等信息,然后进入了有”gdb”开头的命令行界面4、l(list)命令l命令用于查看文件可以看到每行代码面前都有对应的行号,这样方便我们设置断点。
Linux编程使用gcc编译C程序

Linux编程使⽤gcc编译C程序
Linux编程使⽤gcc编译C程序
上⾯介绍了gcc编译器进⾏C语⾔源代码编译时的⼀些基础知识,将以多个实例来介绍如何使⽤gcc编译器对C语⾔进⾏编译。
并介绍gcc编译器存在的错误类型及解决错误的基本⽅法。
1.使⽤gcc编译C语⾔代码
从上⾯介绍可以知道使⽤gcc编译器编译C语⾔代码时的命令为gcc,⾸先创建⼀个test.c⽂件,并在该⽂件中写⼊以下内容:
接下开打开终端窗⼝,进⼊到该⽂件所在⽬录,并输⼊下⾯的命令:
上述命令执⾏完毕后,会在该源⽂件所在⽬录下⽣成⼀个新⽂件,该⽂件名称为mytest,该⽂件就是编译过的可执⾏⽂件,在终端容器中再次输⼊以下命令:
该命令执⾏编译后的⽂件,源⽂件中程序运⾏结果在终端窗⼝中显⽰出来:
通过上⾯步骤可以看到使⽤gcc编译器的⼀般⽅法,下⾯再列举⼀例来熟悉
打开终端窗⼝使⽤下⾯的命令对该⽂件进⾏编译:。
gcc 用法

gcc 用法GCC (GNU Compiler Collection) 是一套自由软件编译器,可以用于编译多种编程语言的源代码,包括 C、C++、Objective-C、Fortran、Ada 和其他一些语言。
GCC 是GNU计划的一部分,由自由软件基金会维护和发展。
本文将详细介绍 GCC 的使用方法。
一、环境准备在使用GCC之前,需要先安装好GCC。
GCC是开源软件,常见的Linux发行版都默认安装GCC,Windows下可以通过安装Cygwin或MinGW等方式安装GCC。
安装完成后,在命令行中输入gcc --version查看gcc的版本号确认是否安装成功。
除了GCC之外,还需要一个文本编辑器来编写源代码。
Windows下常用的文本编辑器有Notepad++,Linux下则使用vim或emacs等编辑器。
还需要了解一些基本的编程知识和语法。
二、GCC 编译 C 语言程序以下是一个简单的 C 语言程序,可以输出 "Hello, world!":```c#include <stdio.h>printf("Hello, world!\n");return 0;}```将上述代码保存为 helloworld.c 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```gcc helloworld.c -o helloworld```gcc是编译器的命令,helloworld.c是待编译的源代码文件名,-o helloworld是生成的可执行文件名。
执行上述命令后,GCC 会把源代码编译成可执行文件 helloworld。
运行该可执行文件,可以得到以下输出:```Hello, world!```三、GCC 编译 C++ 程序GCC 也可以编译 C++ 程序,以下是一个简单的 C++ 程序,可以输出 "Hello,world!":```c++#include <iostream>std::cout << "Hello, world!" << std::endl;return 0;}```将上述代码保存为 helloworld.cpp 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```g++ helloworld.cpp -o helloworld```g++是编译器的命令,helloworld.cpp是待编译的源代码文件名,-o helloworld是生成的可执行文件名。
linuxgcc命令及用法

linuxgcc命令及用法Linux的gcc命令是一款非常强大的编译器,用于将源代码转换为可执行文件。
本文将详细介绍gcc命令及其常用的用法,帮助读者更好地理解和使用这款工具。
一、gcc命令的基本语法结构gcc是GNU Compiler Collection(GNU编译器集合)的简称,因此其命令基本语法结构一般为:shellgcc [选项] [输入文件]其中,选项用于指定编译时的相关参数,输入文件则是需要编译的源文件。
二、gcc命令的常用选项gcc命令提供了许多选项,用于控制编译过程及生成的可执行文件的属性。
下面是一些常用的gcc选项及其作用:1. -o:用于指定输出文件的名称。
例如,使用`-o myprogram`选项将输出文件命名为myprogram。
2. -c:仅进行编译,不进行链接操作。
这个选项常用于编译多个源文件时,先将每个源文件编译为目标文件,再进行链接操作。
3. -g:生成调试信息。
这个选项会在编译时生成与调试器兼容的调试信息,方便开发人员进行程序调试。
4. -Wall:显示所有警告信息。
使用这个选项可以使编译器在编译时输出更多的警告信息,帮助开发人员提前发现潜在的问题。
5. -I:指定头文件的搜索路径。
使用这个选项可以告诉编译器在指定的路径中查找头文件,方便引用外部库、模块等。
6. -L:指定库文件的搜索路径。
与-I选项类似,这个选项用于告诉编译器在指定的路径中查找库文件,用于链接时的库文件搜索。
7. -l:指定要链接的库文件。
使用这个选项可以显式地告诉编译器要链接的库文件,如:-lmath将链接math库文件。
三、gcc命令的应用实例下面通过几个实例来演示gcc命令的具体用法,以帮助读者更好地理解和掌握这款工具。
1. 编译单个源文件并生成可执行文件假设我们有一个名为`hello.c`的源文件,内容如下:c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}我们可以使用以下命令将其编译为可执行文件`hello`:shellgcc -o hello hello.c编译成功后,即可在当前目录下生成名为`hello`的可执行文件。
Linux系统编程实验二:gcc、gdb的使用以及Makefile文件的编写

实验二:gcc 、gdb 、Makefile 的使用实验目的:(一) 学会使用gcc 编译器 (二) 学会gdb 调试器的使用 (三) 学会编写 Makefile实验要求:(一) 编写一应用程序,使用 gcc 进行编译,并分别使用-o ,-g ,-static ,-02等选项 (二) 编写一应用程序,使用 gdb 调试,调试中使用到该小节所介绍的所有命令 (三) 实现一应用程序,该程序有两个 c 文件构成,使用 makefile 来完成对该程序的编译实验器材:软件:安装了 Linux 的vmware 虚拟机 硬件:PC 机一台实验步骤:(一) gcc 编译器1先用vi 编辑hello.c 文件,内容如下:#include <stdio,h>int nain (void ){printfC'hello world\n ,1); return 0;}2、gcc 指令的一般格式为:gcc [选项]要编译的文件[选项][目标文件]例:使用gcc 编译命令,编译 hello.c 生成可执行文件 hello ,并运行hello上面的命令一步由.c 文件生成了可执行文件,将 gcc 的四个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍四个流程分别做了什么工作3、-E 选项的作用:只进行预处理,不做其他处理。
例:只对hello.c 文件进行预处理,生成文件 hello.i ,并查看[root@localhost gcc]# gcc ・E hello.c -o hello.i [root@localhost gcc]# Is hello hello.c hello t i通过查看可以看到头文件包含部分代码 #include <stdio.h>经过预处理阶段之后,编译 器已将stdio.h 的内容贴了进来。
4、-S 选项的使用-S 选项的作用:只是编译不汇编,生成汇编代码 例:将hello.i 文件只进行编译而不进行汇编,生成汇编代码 hello.s[root (alocalhost gcc]# gcc -S hello,i -o hello ■与[rootfalocalhost gcc]# Is lello hello.c hello.i hello.s [root (3localhost[root@localhost gcc]# [root@localhost gcc]# [root@localhost gcc]# hello world [root@lo 匚alhost gcc]# vi hello^c gcc hello.c -o hello ■/hellogcc]# |5、-c选项的使用-c 选项的作用:只是编译不连接,生成目标文件 .0 例:将汇编代码hello.s 只编译不链接成 hello.o 文件[rootfalocalhost gcc]# gcc -c hello.5 -o hello.o [rootfalocalhost gcc]# Ishello hello.c hello.i hello.o hello ・56、将编译好的hello.o 链接库,生成可执行文件 hello[roottalocalhost gcc]# [root@localho5t gcc]# hello hello,c hello [root (alocalhost gcc]#hello world gcc hello.o -o hello Is i hello.o hello.s• /hello 7、-static 选项的使用-static 选项的作用:链接静态库例:比较hello.c 连接动态库生成的可执行文件hellol 的大小hello 和链接静态库生成的可执行文件gcc]# gcc hello.c g 匚c]# gcc -stati 匚 gcc]# 11 -o hello hello ■匚-o hellol -rwxr- xr-x 1 root root 4641 J un -rwxr- xr-x 1 root root 605990 J un -rw- r- ._ p _ 1 root root 75 J un -rw- r- 1 root root 18880 J un -rw- r- 1 root root844 J un -rw - r-1 root root 416 J un1 03 47 hello 1 03 47 hellol 1 03 15 hello.t 1 03 27 hello.i 1 03 41 hello.o 1 03 35 helloes hellol 比动态链接库的可执行文件 hello 要大的多,他们的执行效果是一样的8、-g 选项的使用-g 选项的作用:在可执行程序中包含标准调试信息例:将hello.c 编译成包含标准调试信息的可执行文件hello2[root@localhost [root@localhost hello hello2 hellol hello.cgcc]# gcc -g hello-c -o hello2 gcc]# Is hello.i hello ・s hello.o带有标准调试信息的可执行文件可以使用gdb 调试器进行调试,以便找出逻辑错误9、-02选项的使用-02选项的作用:完成程序的优化工作例:将hello.c 用02优化选项编译成可执行文件 hello3,和正常编译产生的可执行文件hello 进行比较[rootfdlocalhost [root@localhost [root@localhost total 636可以看到静态链接库的可执行文件gcc]# gcc -02 hello-c gcc]# Ishello.c hellohello.i hello .5 gcc]# ./hello gcc]# ./hello3用于gdb 调试器调试,内容如下 #i nclude <stdio.h> int main( void)2、将test.c 文件编译成包含标准调试信息的文件test[root@localhost gdb]# gcc -g test. [root (alocalhost gdb]# Is test test3、启动gdb 进行调试[root@localhost [root@localhost hello hello2 hellal hello3[root@localhost hello world[rootOlocalhost hello world(二) gdb 调试器1先用vi 编辑文件test.co hello3 -o test[rootglocalhost gdb]# gdb testGNU gdb Red Hat Linux (6.5^25*el5rh)Copyright (匚)2006 Free Software Foundation, Inc .GDB is free software F 匚overed by the GNU General Publi 匚 License t and you 日「Ewelcome to change it and/or distribute copies of it und er certain conditions.Type "show copying" to see the conditions ・There is absolutely no warranty for GDB ・ Type "show wa rranty" for dEtails *This GDB was configured as "1386-redhat-linux*gnu"・・.Us ing host libthreaddb library "/^ib/i686/nosegneg/libth read db ・ so.1” ・ 在gdb 中可以设置多个断点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Linux操作系统》
实验报告
实验十:UNIX gcc编译器的使
用与编程环境
一、实验目的
(1)掌握gcc和g++的用法;
(2)了解目标代码、库函数的使用;
(3)掌握静态库和共享库的构造与使用;
(4)掌握多模块和多语言联合开发方法;
(5)掌握make命令和Makefile文件的使用。
二、实验环境
一台装有Windows操作系统PC机,上装有虚拟机系统VMWare,实验过程通过VMWare系统启Linux系统工作。
三、实验内容与实验过程及分析
一、C/C++编程
1、C语言版“Hello World”
用vi编辑一个名为hello.c的文件,其内容为
#include <stdio.h>
main()
{
printf(”Hello World! C\n”);
}
编译并执行程序。
编译方法为:
cc hello.c // 生成可执行程序 a.out
cc –o hello hello.c // 生成可执行程序hello
cc –c hello.c //生成目标文件hello.o
cc –S hello.c //生成汇编语言程序hello.s
执行程序:
./a.out #执行当前目录内,刚编译生成的a.out程序
./hello #执行当前目录内,刚编译生成的hello程序
2、组合编程
设有C语言文件f1.c,内容为:
#include <stdio.h>
f1(int arg){
printf(”f1: you passed %d\n”,arg);
}
C语言文件f2.c。
内容为:
#include <stdio.h>
f2(char *arg){
printf(”f2: you passed %s\n”,arg);
}
C语言文件m.c。
内容为:
#include <stdio.h>
main(){
f1(16);
f2(”Hello World!”);
}
请使用vi编辑并生成以上程序,分别用以下方法编译,观察生成文件或运行生成的可执行程序:
cc –c f1.c f2.c #生成 f1.o 和 f2.o
cc –S f1.c f2.c # 生成 f1.s 和 f2.s;可用vi或cat查看它们的内容cc –o mp m.c f1.c f2.c # 生成mp,执行方法为:./mp
cc –o m m.c f1.o f2.o # 生成m,执行方法为:./m
构造自己的静态库
cc –o f1.c f2.c //生成目标文件f1.o, f2.o ar crv libmyl.a f1.o f2.o //生成库libmyl.a
ranlib libmyl.a //为子函数建立内容表
使用自己的库
cc –o mp m.c libmyl.a // 使用库libmyl.a
cc –o mp m.o libmyl.a // 使用库libmyl.a和m.o cc –o mp m.c -L. –lmyl // 在当前目录以默认方法使用库myl
3、构造可共享库
cc -c f1.c f2.c //生成目标文件cc -shared -o libmy.so f1.o f2.o //由目标文件生成共享库
或cc -shared –o libmy.so –c f1.c f2.c//由源文件生成共享库
4、使用共享库
//设以下程序的文件名为f3.c,f1.c和f2.c如前
#include <stdio.h>
#include <dlfcn.h>
#define SO_FILE "./libmy.so"
//共享库libmy.so被限定在当前目录,也可放在标准位置,但要使用ldd和ldconfig 处理
main()
{
void *sfp; char *err;
int tmpi=16;
int (*f1)(int ),(*f2)(char *); //定义函数指针
sfp=dlopen(SO_FILE,RTLD_LAZY); //打开共享库
if(sfp==NULL){
fprintf(stderr,dlerror()); exit(1);
}
f1=dlsym(sfp,"f1"); //获取函数f1入口地址(指针)
err=dlerror(); //检查是否成功
if(err){
fprintf(stderr,err); exit(2);
}
f2=dlsym(sfp,"f2"); //获取函数f2入口地址(指针)
err=dlerror(); //检查是否成功
if(err){
fprintf(stderr,err); exit(3);
}
fprintf(stderr,"-----------begine-------------\n");
f2("Test String"); //调用函数f2
f1(tmpi); //调用函数f1
fprintf(stderr,"++++++++++++end+++++++++++++++\n");
dlclose(sfp); //关闭共享库exit(0);
}
5、Makefile的编写与使用
(1)针对2)的Makefile文件
a.Makefile文件的构造
f: f1.o f2.o f3.o
gcc -o f f1.o f2.o f3.o
f1.o: f1.c
gcc –c f1.c
f2.o: f2.c
gcc –c f2.c
f3.o: f3.c
gcc –c f3.c
b.Makefile的使用
make #生成默认(第一个)目标
make f #生成目标f
make f1.o #生成目标f1.o
四、实验总结
存在问题:makefile的使用和编写频繁出现问题,对makefile的不熟悉,理解不透彻解决方法:多看书,从书上找到相关问题的解决办法,对于书上没有的内容上网查询,查看各种命令的使用方法及应用
收获:对进程的相关应用有了一定的认识和使用,有问题要及时询问,上网查询解决。
五、教师评语。