《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 中可以设置多个断点。
C语言编译器gcc命令如何操作步骤
C语言编译器gcc命令如何操作步骤C语言是一种高级编程语言,由于其结构化编程,声明式语法,高效性和可靠性,被广泛用于很多领域。
gcc是一种C语言编译器,是Unix系统中最常用的编译器之一,它可以编译C、C++、JAVA等语言。
本文将为读者介绍对于gcc编译器的基本概念、相关命令以及实践操作步骤。
一、gcc基本概念1. 什么是编译器?先来了解一下编译器的作用。
编译器是将高级语言编写的程序转换成计算机可执行的机器语言的软件程序。
程序员可以使用高级语言编写程序,编译器将高级语言转换成计算机能够理解的机器语言。
2. 什么是gcc?GCC是GNU编译器集合(GNU Compiler Collection)的缩写。
它是一个重要的语言编译器,可以编译C、C++、JAVA等语言的程序。
gcc包含了一系列的编译器,每一个编译器都可以编译不同的语言,它不仅是Linux系统中的常用编译器,也被广泛使用于其他操作系统中。
3. gcc优点- 开源软件:可以透明、高效地利用计算机系统资源,让整个编译过程更灵活。
- 软件体积小:由于每次都是重新编译,因此gcc生成的二进制文件体积很小。
- 可移植性:gcc可以在不同的操作系统上进行编译。
同一份源代码,在不同的系统上编译,可以得到相同的结果。
- 动态链接库:gcc支持动态链接库,可以减少程序的代码冗余问题。
二、gcc常用命令以下是gcc编译器的常用命令:1. gcc -ogcc命令使用" -o"选项可以把源文件编译成可执行文件,例如:```$ gcc -o hello hello.c```上述命令的含义是将hello.c文件编译成hello可执行文件。
2. gcc -cgcc命令使用" -c"选项将源文件编译成目标文件。
目标文件是不可执行的文件,它包含了已经编译过的程序的一部分,这些程序可以用作最终的可执行文件中的一部分。
例如:```$ gcc -c hello.c```上述命令的含义是将hello.c文件编译成目标文件hello.o。
gcc编译器使用方法
gcc编译器使用方法一、介绍:GCC(GNU Compiler Collection)是一套由GNU开发的编程语言编译器集合,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等。
在Linux系统中,GCC是最常用的编译器之一,本文将详细介绍GCC编译器的使用方法。
二、安装GCC编译器:在Linux系统中,GCC编译器通常已经预装。
可以通过以下命令检查GCC是否已经安装:```gcc --version```如果GCC已安装,则会显示其版本信息;如果未安装,则需要通过包管理器进行安装,例如在Ubuntu系统中,可以使用以下命令安装GCC:```sudo apt-get install gcc```三、编译C程序:GCC编译器可以用来编译C程序,以下是一个简单的例子:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```将上述代码保存为hello.c文件,然后使用以下命令编译:```gcc hello.c -o hello```其中,hello.c是源文件的名称,-o指定输出文件的名称,这里将输出文件命名为hello。
编译成功后,可以执行生成的可执行文件:```./hello```输出结果将是:```Hello, World!```四、编译C++程序:GCC编译器也可以用来编译C++程序,以下是一个简单的例子:```cpp#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0;}```将上述代码保存为hello.cpp文件,然后使用以下命令编译:```g++ hello.cpp -o hello```其中,hello.cpp是源文件的名称,-o指定输出文件的名称,这里将输出文件命名为hello。
Linuxgcc编译器使用方法
Linuxgcc编译器使用方法LINUX gcc编译器使用方法本文介绍了在LINUX下进行C语言编程所需的基本知识。
在本文中,我们将学习以下内容:源代码编译编译文件编译库链接程序调试头文件和系统帮助|源代码编译是在Linux下进行的。
如果你想编译一个c语言源程序,我们将使用GNU的gcc编译器。
让我们举一个例子来说明如何使用gcc编译器。
假设我们有以下非常简单的源程序(你好。
INTMAIN(INTARGGC,CHAR * * ARGV){PRINTF(Hello Linux);要编译这个程序,我们只需要在命令行执行。
cgcc编译器将为我们生成一个hello可执行文件。
执行。
/你好可以看到程序的输出。
在命令行中,gcc表示我们使用gcc来编译我们的源程序。
o选项表示我们需要编译器输出给我们的可执行文件叫做hello,hello.c是我们的源程序文件。
gcc编译器有许多选项。
一般来说,我们只需要知道其中的一些。
-o 选项我们已经知道,这意味着我们需要输出可执行文件的名称。
-c 选项意味着我们只需要编译器输出目标代码。
但是,没有必要输出可执行文件。
-g选项意味着我们需要编译器在以后编译时为我们提供调试程序的信息。
如果知道这三个选项,我们可以编译自己编写的简单源程序。
如果您想了解更多选项,可以查看gcc帮助文档。
有许多其他选项的详细描述。
2。
makefile的编写假设我们有这样一个程序。
源代码如下:/* main . c */# include mytol 1 . h # include mytol 2 . h intmain(intargc,char * * argv){mytol 1 _ print(hello);mytool2_print(您好);}/* my tool 1 . H */# if ndef _ MYTOL _ 1 _ H# define _ MYTOL _ 1 _ Hvoid my tool 1 _ print(char * print _ str);# endif/* my tool 1 . c */# include my tool 1 . h void my tool 1 _ print(char * print _ str){printf(这是mytool1 print,print _ str);}/* my tool 2 . H */# if ndef _ MYTOL _ 2 _ H # define _ MYTOL _ 2 _ Hvoid my tool 2 _ print(char * print _ str);# endif/* my tool 2 . c */# include my tool 2 . h void my tool 2 _ print(char * print _ str){printf(这是mytool2 print,print _ str);当然,因为这个程序很短,所以我们可以编译gcc-c main . cgcc-c my tool 1 . cgcc-c my tool 2 . cgcc-o main . o my tool 1 . o my tool 2 . o。
最新Linux_Gcc简介 GCC使用说明手册
gcc所遵循的部分约定规则
• gcc所遵循的部分约定规则
-o output_filename,确定输出文件的名称为output_filename, 同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给 出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对 源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会 在编译、连接过程中进行优化处理,这样产生的可执行文件的执 行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
前面提到便宜的后缀问题,而gcc则通过后缀来区别输入文件的类 别,下面我们来介绍gcc所遵循的部分约定规则。
✓ .c为后缀的文件,C语言源代码文件; ✓ .a为后缀的文件,是由目标文件构成的档案库文件; ✓ .C,.cc或.cxx 为后缀的文件,是C++源代码文件; ✓ .h为后缀的文件,是程序所包含的头文件; ✓ .i 为后缀的文件,是已经预处理过的C源代码文件; ✓ .ii为后缀的文件,是已经预处理过的C++源代码文件; ✓ .m为后缀的文件,是Objective-C源代码文件; ✓ .o为后缀的文件,是编译后的目标文件; ✓ .s为后缀的文件,是汇编语言源代码文件;
✓ .S为后缀的文件,是经过预编译的汇编语言源代码文件。
Gcc的执行过程
• Gcc的执行过程
linux下gcc编译器的使用[1]
linux下gcc编译器的使用[1]第一篇:linux下gcc编译器的使用[1]linux下gcc编译器的使用(网上转载) 2008-08-19 10:43 在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。
目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。
GCC不仅功能非常强大,结构也异常灵活。
最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada 等。
开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。
在使用GCC编译程序时,编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。
和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。
GCC提供了30多条警告信息和三个警告级别,使用它们有助于增强程序的稳定性和可移植性。
此外,GCC还对标准的C和C++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量。
GCC起步在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理,并将其立即运用到实际的项目开发中去。
首先用熟悉的编辑器输入清单1所示的代码:清单1:hello.c #include int main(void) { printf ("Hello world, Linux programming!\n"); return 0; }然后执行下面的命令编译和运行这段程序:# gcc hello.c -o hello # ./hello Hello world, Linux programming!从程序员的角度看,只需简单地执行一条GCC命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工作。
Linux命令高级技巧使用gcc命令进行CC编译和链接
Linux命令高级技巧使用gcc命令进行CC编译和链接Linux命令高级技巧:使用gcc命令进行C/C++编译和链接在Linux系统中,gcc是一种非常强大和常用的编译器,可以用于编译和链接C/C++程序。
本文将介绍一些gcc命令的高级技巧,以帮助读者更有效地使用gcc进行编译和链接。
1. 检查gcc版本要使用gcc命令,首先需要确保gcc已经正确安装在系统中。
可以使用以下命令检查gcc版本:```gcc --version```该命令会显示gcc的版本信息,以确保安装的gcc版本符合要求。
2. 编译单个源文件使用gcc编译单个源文件非常简单,只需使用以下命令:```gcc -o output_filename source_filename```其中,output_filename是编译生成的可执行文件的名称,source_filename是需要编译的源文件的名称。
例如,要编译名为`hello.c`的源文件并生成可执行文件`hello`,可以使用以下命令:```gcc -o hello hello.c```编译成功后,可以通过运行`./hello`命令执行生成的可执行文件。
3. 编译多个源文件对于包含多个源文件的项目,需要将多个源文件一起编译。
下面是一个示例命令:```gcc -o output_filename source_file1 source_file2 ... source_fileN```在这个命令中,只需将所有需要编译的源文件按顺序列出即可。
例如,要编译名为`main.c`和`helper.c`的两个源文件并生成可执行文件`program`,可以使用以下命令:```gcc -o program main.c helper.c```4. 自动编译所有源文件如果项目中的源文件比较多,手动编译每个源文件将会非常繁琐。
可以使用Makefile文件来自动编译所有源文件。
以下是一个简单的Makefile示例:```CC=gccCFLAGS=-call: programprogram: main.o helper.o$(CC) main.o helper.o -o programmain.o: main.c$(CC) $(CFLAGS) main.chelper.o: helper.c$(CC) $(CFLAGS) helper.cclean:rm -rf *.o program```在这个Makefile中,`CC`变量指定了编译器,`CFLAGS`变量指定了编译选项。
LINUX下C语言使用、编译与调试实验
LINUX下C语言使用、编译与调试实验LINUX 下C语言使用、编译与调试实验实验目的1、复习C语言程序基本知识2、练习并掌握UNIX提供的vi编辑器来编译C程序3、学会利用gcc、gdb编译、调试C程序实验内容1、用vi编写一个简单的、显示"Hello,World!"的C程序,用gcc 编译并观察编译后的结果2、利用gdb调试该程序3、运行生成的可执行文件。
实验指导一、C语言使用简介LINUX中包含了很多软件开发工具。
它们中的很多是用于C和C++应用程序开发的。
C是一种能在UNIX的早期就被广泛使用的通用编程语言。
它最早是由Bell 实验室的Dennis Ritchie为了UNIX的辅助开发而写的,从此C就成为世界上使用最广泛的计算机语言。
C能在编程领域里得到如此广泛支持的原因有:(1)它是一种非常通用的语言,并且它的语法和函数库在不同的平台上都是统一的,对开发者非常有吸引力;(2)用C写的程序执行速度很快;(3)C是所有版本UNIX上的系统语言;二、文件编辑器vivi是在UNIX 上被广泛使用的中英文编辑软件。
vi是visual editor 的缩写,是UNIX提供给用户的一个窗口化编辑环境。
进入vi,直接执行vi编辑程序即可。
例:$vi test.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。
编辑完成后,使用者可决定是否要取代原来旧有的文件。
1、vi的工作模式vi提供二种工作模式:输入模式(insert mode)和命令模式(command mode)。
使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。
要输入信息,应转换到输入模式。
(1)命令模式在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi::q! 离开vi,并放弃刚在缓冲区内编辑的内容:wq 将缓冲区内的资料写入磁盘中,并离开vi:ZZ 同wq:x 同wq:w 将缓冲区内的资料写入磁盘中,但并不离开vi:q 离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(2)命令模式下光标的移动H 左移一个字符J 下移一个字符K 上移一个字符L 右移一个字符0 移至该行的首$ 移至该行的末^ 移至该行的第一个字符处H 移至窗口的第一列M 移至窗口中间那一列L 移至窗口的最后一列G 移至该文件的最后一列W, W下一个单词 (W 忽略标点)B, B 上一个单词 (B 忽略标点)+ 移至下一列的第一个字符处- 移至上一列的第一个字符处( 移至该句首) 移至该句末{ 移至该段首} 移至该段末NG 移至该文件的第n列N+ 移至光标所在位置之后第n列n- 移至光标所在位置之前第n列(3)输入模式输入以下命令即可进入vi输入模式:a(append) 在光标之后加入资料A 在该行之末加入资料i(insert) 在光标之前加入资料I 在该行之首加入资料o(open) 新增一行于该行之下,供输入资料用O 新增一行于该行之上,供输入资料用Dd 删除当前光标所在行X 删除当前光标字符X 删除当前光标之前字符U 撤消·重做F 查找s 替换,例如:将文件中的所有"FOX"换成"duck",用":%s/FOX/duck/g"ESC 离开输入模式更多用法见 info vi三、GNU C编译器LINUX上可用的C编译器是GNU C编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。
Linux下编辑、编译、调试命令总结——gcc和gdb描述
Linux下编辑、编译、调试命令总结——gcc和gdb描述GCC gcc是linux系统集成的编译器。
在linux环境下编辑程序,⾸先需要克服的便是没有集成开发环境的⼀键式操作所带来的⿇烦。
这其中涉及命令⾏操作、编译选项的设定、⽂件依赖关系的书写(makefile)等问题。
这⾥主要介绍的是关于gcc的常⽤命令⾏参数及其相应的作⽤。
(若编译C++⽂件,则只需将下列命令的 gcc 换为 g++,源⽂件的后缀应为 .C/.cpp/.c++/.cc等)基本格式:gcc [options] file1 file2... //若不加⼊参数,则按默认参数依次执⾏编译、汇编和链接操作,⽣成的可执⾏⽂件名为 a.out常⽤参数:-E //只执⾏预处理操作,直接输出到标准输出(可通过 -o 命令指定输出到⽂件中 ),可配合 -v 命令使⽤,查看头⽂件的搜索⽬录,即使⽤ -E -v 编译选项 -S //只执⾏到编译操作完成,不进⾏汇编操作,⽣成的是汇编⽂件(.s 或 .asm),内容为汇编语⾔ -c //执⾏编译和汇编,但不进⾏链接,即只⽣成可重定位⽬标⽂件(.o),为⼆进制⽂件,不⽣成完整的可执⾏⽂件 -o filename //将操作后的内容输出到filename指定的⽂件中 -static //对于⽀持动态链接的系统,使⽤静态链接⽽不是动态链接进⾏链接操作 -g //编译时⽣成debug有关的程序信息(供gdb使⽤) --save-temps //⽣成编译过程的中间结果⽂件(包括预处理⽂件(x.ii)、汇编代码(x.s)、⽬标⽂件(x.o)和最终的可执⾏⽂件) -IPATH //在PATH指定的⽬录下寻找相关的include⽂件,参数中间不加空格 -lxx //其中xx为指定函数库,对于Linux环境下的函数库,静态库后缀为.a,动态库后缀为.so,⼀般库名为libxx.a或libxx.so,如加⼊libm.so库,则使⽤参数-lm(去除lib和后缀.a\so) -LPATH //在PATH指定的⽬录下寻找相关的库⽂件,即-lxx指定待链接的库,-L指定寻找该库的路径。
实验10:GCC编译器的使用与编程环境
(2)添加 clean、install 和 unstall 之后的 Makefile 文件。
CC = gcc
# 指定 C 语言编译器
SRC = file1.c file2.c
// 生成 file1.o 和 file2.o // 生成 file1.s 和 file2.s // 生成 a.out // 生成 mp
3) 静态库的构造与使用
①静态库构造
对于以上工程中,使用 file1.c 和 file2.c 构造静态库的方法如下
用 file1.c 和 file2.c 生成 libmyl.a 的过程如下:
gij HelloWorld
# 执行
②在已经安装 JDK 的情况下,可以使用 javac 编译,用 java 执行,方法如下
javac HelloWorld.java
# 生成字节码
java HelloWorld
# 执行
说明:可以从 Linux/Unix 系统的发布资源库中安装 JDK,也可以从 Oracle 的官方网站
# ld -shared -o libmydl.so file1.o file2.o # 链接生成共享库 libmydl.so # gcc -shared -o libmydl.so file1.o file2.o # 同上
共享库生成之后,就可以使用了。若是为了方便起见,可将新生成的共享库移动或复制到库
a)库文件 libmyl.a 在标准位置(/lib 或/usr/lib)
$ gcc -o myprog file3.c –l myl
# 非标准库,需用-l 指定库名
b)库文件不在标准位置,比如在当前目录
$ gcc -o myprog libmyl.a
- 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的不熟悉,理解不透彻解决方法:多看书,从书上找到相关问题的解决办法,对于书上没有的内容上网查询,查看各种命令的使用方法及应用
收获:对进程的相关应用有了一定的认识和使用,有问题要及时询问,上网查询解决。
五、教师评语。