linux 编译器gcc

合集下载

Linux超详细gcc升级全过程

Linux超详细gcc升级全过程

Linux超详细gcc升级全过程⽬录前⾔1.当前gcc版本2.安装gcc3.gmp安装4.MPFR编译5.MPC编译6.GCC 配置7.GCC版本更新前⾔c c++ 等等需要这个编译器gcc,最近有DBA的朋友咨询RHEL7.6操作系统安装Mysql数据库时需要⾼版本的GCC,研究了下发现坑不少,总结本⽂分享给⼤家1.当前gcc版本[root@rhel76 ~]# gcc -vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapperTarget: x86_64-redhat-linuxConfigured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_at Thread model: posixgcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)从以上可以看出当前版本为4.8.5,本次我们升级到10.1.02.安装gcc--下载地址:https:///gnu/gcc/gcc-10.1.0/[root@rhel76 ~]# tar -vxf gcc-10.1.0.tar.gz[root@rhel76 gcc-10.1.0]# mkdir build[root@rhel76 gcc-10.1.0]# cd build/[root@rhel76 build]# ../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilibchecking build system type... x86_64-pc-linux-gnuchecking host system type... x86_64-pc-linux-gnuchecking target system type... x86_64-pc-linux-gnuchecking for a BSD-compatible install... /usr/bin/install -cchecking whether ln works... yeschecking whether ln -s works... yeschecking for a sed that does not truncate output... /usr/bin/sedchecking for gawk... gawkchecking for libatomic support... yeschecking for libitm support... yeschecking for libsanitizer support... yeschecking for libvtv support... yeschecking for libhsail-rt support... yeschecking for libphobos support... yeschecking for gcc... gccchecking whether the C compiler works... yeschecking for C compiler default output file name... a.outchecking for suffix of executables...checking whether we are cross compiling... nochecking for suffix of object files... ochecking whether we are using the GNU C compiler... yeschecking whether gcc accepts -g... yeschecking for gcc option to accept ISO C89... none neededchecking for g++... g++checking whether we are using the GNU C++ compiler... yeschecking whether g++ accepts -g... yeschecking whether g++ accepts -static-libstdc++ -static-libgcc... nochecking for gnatbind... nochecking for gnatmake... nochecking whether compiler driver understands Ada... nochecking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2checking for objdir... .libschecking for the correct version of gmp.h... noconfigure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.Try the --with-gmp, --with-mpfr and/or --with-mpc options to specifytheir locations. Source code for these libraries can be found attheir respective hosting sites as well as athttps:///pub/gcc/infrastructure/. See also/install/prerequisites.html for additional info. Ifyou obtained GMP, MPFR and/or MPC from a vendor distribution package,make sure that you have installed both the libraries and the headerfiles. They may be located in separate packages.从⽇志总可以看出有如下报错,故下⾯每个都安装configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.3.gmp安装[root@jeames007 ~]# tar -vxf gmp-5.0.1.tar.bz2[root@jeames007 ~]# cd gmp-5.0.1/[root@jeames007 gmp-5.0.1]# ./configure --prefix=/usr/local/gmp-5.0.1[root@jeames007 gmp-5.0.1]# make[root@jeames007 gmp-5.0.1]# make installmake[4]: Leaving directory `/root/gmp-5.0.1'make[3]: Leaving directory `/root/gmp-5.0.1'make[2]: Leaving directory `/root/gmp-5.0.1'make[1]: Leaving directory `/root/gmp-5.0.1'4.MPFR编译[root@jeames007 ~]# tar -vxf mpfr-3.1.5.tar.xz[root@jeames007 ~]# cd mpfr-3.1.5/[root@jeames007 ~]#./configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-5.0.1[root@jeames007 mpfr-3.1.5]# make[root@jeames007 mpfr-3.1.5]# make install5.MPC编译[root@jeames007 ~]# tar -vxf mpc-1.0.1.tar.gz[root@jeames007 ~]# cd mpc-1.0.1[root@jeames007 ~]# ./configure --prefix=/usr/local/mpc-1.0.1 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5[root@jeames007 mpc-1.0.1]# make[root@jeames007 mpc-1.0.1]# make install6.GCC 配置[root@rhel76 ~]# cd gcc-10.1.0[root@rhel76 gcc-10.1.0]# cd build/../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.1 checking build system type... x86_64-pc-linux-gnuchecking host system type... x86_64-pc-linux-gnuchecking target system type... x86_64-pc-linux-gnuchecking for a BSD-compatible install... /usr/bin/install -cchecking whether ln works... yeschecking whether ln -s works... yeschecking for a sed that does not truncate output... /usr/bin/sedchecking for gawk... gawkchecking for libatomic support... yeschecking for libitm support... yeschecking for libsanitizer support... yeschecking for libvtv support... yeschecking for libhsail-rt support... yeschecking for libphobos support... yeschecking for gcc... gccchecking whether the C compiler works... yeschecking for C compiler default output file name... a.outchecking for suffix of executables...checking whether we are cross compiling... nochecking for suffix of object files... ochecking whether we are using the GNU C compiler... yeschecking whether gcc accepts -g... yeschecking for gcc option to accept ISO C89... none neededchecking for g++... g++checking whether we are using the GNU C++ compiler... yeschecking whether g++ accepts -g... yeschecking whether g++ accepts -static-libstdc++ -static-libgcc... nochecking for gnatbind... nochecking for gnatmake... nochecking whether compiler driver understands Ada... nochecking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2checking for objdir... .libschecking for the correct version of gmp.h... yeschecking for the correct version of mpfr.h... buggy but acceptablechecking for the correct version of mpc.h... yeschecking for the correct version of the gmp/mpfr/mpc libraries... yeschecking for isl 0.15 or later... norequired isl version is 0.15 or later*** This configuration is not supported in the following subdirectories:gnattools gotools target-libada target-libhsail-rt target-libphobos target-zlib target-libbacktrace target-libgfortran target-libgo target-libffi target-libobjc target-liboffloadmic(Any other directories should still work fine.)checking for default BUILD_CONFIG... bootstrap-debugchecking for --enable-vtable-verify... nochecking for bison... bison -ychecking for bison... bisonchecking for gm4... nochecking for gnum4... nochecking for m4... m4checking for flex... flexchecking for flex... flexchecking for makeinfo... no/root/gcc-10.1.0/missing: line 81: makeinfo: command not foundchecking for expect... nochecking for runtest... nochecking for ar... archecking for as... aschecking for dlltool... nochecking for ld... ldchecking for lipo... nochecking for nm... nmchecking for ranlib... ranlibchecking for strip... stripchecking for windres... nochecking for windmc... nochecking for objcopy... objcopychecking for objdump... objdumpchecking for otool... nochecking for readelf... readelfchecking for cc... ccchecking for c++... c++checking for gcc... gccchecking for gfortran... gfortranchecking for gccgo... nochecking for gdc... nochecking for ar... nochecking for ar... archecking for as... nochecking for as... aschecking for dlltool... nochecking for dlltool... nochecking for ld... nochecking for ld... ldchecking for lipo... nochecking for lipo... nochecking for nm... nochecking for nm... nmchecking for objcopy... nochecking for objcopy... objcopychecking for objdump... nochecking for objdump... objdumpchecking for otool... nochecking for otool... nochecking for ranlib... nochecking for ranlib... ranlibchecking for readelf... nochecking for readelf... readelfchecking for strip... nochecking for strip... stripchecking for windres... nochecking for windres... nochecking for windmc... nochecking for windmc... nochecking where to find the target ar... host toolchecking where to find the target as... host toolchecking where to find the target cc... just compiledchecking where to find the target c++... just compiledchecking where to find the target c++ for libstdc++... just compiledchecking where to find the target dlltool... host toolchecking where to find the target gcc... just compiledchecking where to find the target gfortran... host toolchecking where to find the target gccgo... host toolchecking where to find the target gdc... host toolchecking where to find the target ld... host toolchecking where to find the target lipo... host toolchecking where to find the target nm... host toolchecking where to find the target objcopy... host toolchecking where to find the target objdump... host toolchecking where to find the target otool... host toolchecking where to find the target ranlib... host toolchecking where to find the target readelf... host toolchecking where to find the target strip... host toolchecking where to find the target windres... host toolchecking where to find the target windmc... host toolchecking whether to enable maintainer-specific portions of Makefiles... noconfigure: creating ./config.statusconfig.status: creating Makefile[root@jeames007 ~]# make -j4make 时间很长,很长,耐⼼等待,本⼈编译了1个⼩时。

gcc使用大全

gcc使用大全

1、用于linux系统下编程的编译器概述GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU 开发的编程语言编译器。

它是一套GNU编译器套装以GPL 及LGPL 许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。

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

GCC 很快地扩展,变得可处理C++。

之后也变得可处理Fortran、Pascal、Objective-C、Jav a, 以及Ada与其他语言。

历史GCC是由理查德·马修·斯托曼在1985年开始的。

他首先扩增一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。

Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。

为了让自由软件有一个编译器,后来此编译器由斯托曼和Len Tower在1987年以C语言重写并成为GNU 专案的编译器。

GCC的建立者由自由软件基金会直接管理。

在1997年,一群不满GCC缓慢且封闭的创作环境者,组织了一个名为EGCS 〈Experimental/Enhanced GNU Compiler System〉的专案,此专案汇整了数项实验性的分支进入某个GCC专案的分支中。

EGCS比起GCC的建构环境更有活力,且EGCS最终也在1999年四月成为GCC的官方版本。

GCC目前由世界各地不同的数个程序设计师小组维护。

它是移植到中央处理器架构以及操作系统最多的编译器。

由于GCC已成为GNU系统的官方编译器(包括GNU/Linux家族),它也成为编译与建立其他操作系统的主要编译器,包括BSD家族、Mac OS X、NeXTSTEP 与BeOS。

GCC通常是跨平台软件的编译器首选。

有别于一般局限于特定系统与执行环境的编译器,GCC在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。

linux的gcc使用方法

linux的gcc使用方法

linux的gcc使用方法Linux是一种开源的操作系统,广泛应用于服务器和嵌入式系统中。

而GCC(GNU Compiler Collection)是Linux下最常用的编译器套件之一,用于将源代码编译成可执行文件。

本文将介绍GCC的使用方法,帮助读者快速上手。

一、安装GCC在Linux系统中,默认情况下已经安装了GCC。

可以通过运行以下命令来验证是否已经安装了GCC:```gcc --version```如果GCC已经安装,则会显示GCC的版本信息;如果没有安装,则可以通过运行以下命令来安装GCC:```sudo apt-get install gcc```二、编写源代码在使用GCC之前,我们需要先编写源代码。

可以使用任何文本编辑器创建一个以.c为后缀的源文件,例如hello.c。

下面是一个示例的源代码:```c#include <stdio.h>int main() {printf("Hello, world!\n");return 0;}```三、编译源代码编写完源代码后,我们可以使用GCC来将其编译成可执行文件。

在终端中运行以下命令:```gcc -o hello hello.c```其中,-o参数用于指定编译后生成的可执行文件的名称,hello为示例的可执行文件名,hello.c为源代码文件名。

如果编译成功,GCC将会生成一个名为hello的可执行文件。

四、运行可执行文件在编译成功后,我们可以通过以下命令来运行可执行文件:```./hello```如果一切顺利,终端将会输出"Hello, world!"的字符串。

五、GCC的其他常用选项除了上述基本的使用方法外,GCC还提供了许多其他的选项,用于控制编译过程的行为。

以下是一些常用的选项:- -Wall:开启所有警告信息的显示。

- -g:生成供调试器使用的调试信息。

- -O2:进行优化处理,提高程序执行效率。

linux gcc编译格式 -回复

linux gcc编译格式 -回复

linux gcc编译格式-回复Linux GCC编译格式详解GCC是GNU编译器集合(GNU Compiler Collection)的缩写,它是一款功能强大且广泛使用的编译工具。

在Linux操作系统中,GCC被广泛用来编译各种类型的程序,包括C、C++和Fortran等。

本文将从基本介绍开始,一步一步详细解释GCC编译格式,帮助读者更好地理解和使用GCC。

1. GCC介绍GCC是一个由GNU Project创建的自由软件,它是一个以GPL(GNU通用公共许可证)方式发布的编译器。

GCC支持多种编程语言,包括C、C++、Fortran、Ada和Objective-C等,因此广泛应用于不同的领域。

2. GCC命令格式GCC的命令格式一般为:gcc [options] [source files] [object files] [libraries]其中,方括号内的部分代表可选参数,源文件(source files)指的是待编译的源代码文件,目标文件(object files)是通过编译生成的中间文件,库文件(libraries)是用于链接程序所需的额外库文件。

3. 基本编译命令GCC可以根据源代码文件进行编译,生成可执行文件。

以下是基本编译命令的格式:gcc -o <output> <input>其中,-o选项用于指定生成的可执行文件的名称,<output>代表输出文件的名称(通常为可执行文件的名字),<input>为输入文件的名称(通常为源代码文件的名字)。

例如,假设我们有一个名为hello.c的源代码文件,可以使用如下命令编译生成可执行文件hello:gcc -o hello hello.c4. 高级编译选项GCC提供了丰富的编译选项,用于控制编译过程中的各种参数和行为。

以下是一些常用的选项:- -Wall:启用所有警告信息。

- -g:生成调试信息,用于调试程序。

Linux编程 使用gcc编译C程序

Linux编程  使用gcc编译C程序
}
}
编译时可以使用如下命令:
gcc -o func main.c fun.c
编译完成后,使用下面的命令执行并显示结果:
./func 5
5的阶乘是:120
2.gcc的错误类型及对策
gcc编译器如果发现源程序中有错误,就无法继续进行,也无法生成最终的可执行文件。为了便于修改,gcc给出错误资讯,用户必须对这些错误资讯逐个进行分析、处理,并修改相应的语言,才能保证源代码的正确编译连接。gcc给出的错误资讯一般可以分为四大类,这里分别来讨论其产生的原因和对策。
排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是在使用C语言描述一个算法中所产生的错误,是比较容易排除的。一个程序,到编译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,还需要更加深入地测试、调试和修改。稍为复杂的程序,往往要经过多次的编译、连接和测试、修改,用户在学习中应该不断提高程序的维护和调试能力。
#include <stdio.h>
int main()
{
printf("你好!");
return 0;
}
接下开打开终端窗口,进入到该文件所在目录,并输入下面的命令:
gcc -o mytest test.c
上述命令执行完毕后,会在该源文件所在目录下生成一个新文件,该文件名称为mytest,该文件就是编译过的可执行文件,在终端容器中再次输入以下命令:
int i=1;
for(i;i<=100;n++)
sum=sum+i;
printf("最后结果为:%d",sum);

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是生成的可执行文件名。

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

arm-linux-gcc常用参数讲解gcc编译器使用方法我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为arm-linux-gcc。

下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家。

在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段:1. 预处理(Pre-Processing)2. 编译(Compiling)3. 汇编(Assembling)4. 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。

和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。

以文件example.c为例说明它的用法0. arm-linux-gcc -o example example.c不加-c、-S、-E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。

-o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出a.out1. arm-linux-gcc -c -o example.oexample.c-c参数将对源程序example.c进行预处理、编译、汇编操作,生成example.0文件去掉指定输出选项"-o example.o"自动输出为example.o,所以说在这里-o加不加都可以2.arm-linux-gcc -S -o example.sexample.c-S参数将对源程序example.c进行预处理、编译,生成example.s文件-o选项同上3.arm-linux-gcc -E -o example.iexample.c-E参数将对源程序example.c进行预处理,生成example.i文件(不同版本不一样,有的将预处理后的内容打印到屏幕上)就是将#include,#define等进行文件插入及宏扩展等操作。

linux安装配置交叉编译器arm-linux-gnueabi-gcc

linux安装配置交叉编译器arm-linux-gnueabi-gcc

linux安装配置交叉编译器arm-linux-gnueabi-gcc要使我们在x86架构下运⾏的程序迁移⾄ARM架构的开发板中运⾏时,需要通过交叉编译器将x86下编写的程序进⾏编译后,开发版才能运⾏。

在安装之前我们需要了解,什么是。

⼀、下载交叉编译器1.新版本的下载⼊⼝如下图所⽰:下载流程如下所⽰:“GNU Toolchain Integration Builds → 11.0-2021.03-1 → arm-linux-gnueabihf → gcc-linaro-11.0.1-2021.03-x86_64_arm-linux-gnueabihf.tar.xz。

”注意:随着时间的不同可能版本号有所变化,不过下载流程应给是⼀样的,除⾮⽹站的变化很⼤。

2.历史版本下载⼊⼝如下图所⽰:下载流程如下所⽰:“View Releases → components → toolchain → binaries → 6.2-2016.11 → arm-linux-gnueabihf → gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz”⼆、安装交叉编译器进⼊linux系统,在/usr/local下创建arm⽂件,将下载的交叉编译⼯具链拷贝到linux系统的/usr/local/arm路径下,并进项解压,如下图所⽰:三、设置环境变量打开/etc/profile⽂件sudo vim /etc/profile在⽂件的最后⼀⾏添加交叉编译链的路径,完成后保存退出export PATH=$PATH:/usr/local/arm/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin如下图所⽰:重新加载环境变量的配置⽂件source /etc/profile检验是否安装成功arm-linux-gnueabihf-gcc -v如果出现以下信息说明安装成功。

Linux_3_编译工具链

Linux_3_编译工具链

编译工具链前面我们写程序的时候用的都是集成开发环境(IDE: Integrated Development Environment),集成开发环境可以极大地方便我们程序员编写程序,但是配置起来也相对麻烦。

在 Linux 环境下,我们用的是编译工具链,又叫软件开发工具包(SDK: Software Development Kit)。

Linux 环境下常见的编译工具链有:GCC 和 Clang,我们使用的是 GCC。

1编译gcc、g++分别是 gnu 下的 c 和 c++编译器。

$ sudo a pt inst a ll g cc gd b# 安装g cc和gd b$ g cc-v# 查看g cc的版本在讲如何编译之前,有必要给大家回顾一下生成可执行程序的整个过程:对应的 gcc 命令如下:g cc-E hello.c-o hello.i# -E激活预处理,生成预处理后的文件g cc-S hello.i-o hello.s# —S激活预处理和编译,生成汇编代码g cc-c hello.s-o hello.o# -c激活预处理、编译和汇编,生成目标文件g cc hello.o-o hello# 执行所有阶段,生成可执行程序其实没必要指定每一个步骤,我们常常会这样用:g cc-c hello.c# 生成目标文件,g cc会根据文件名hello.c生成hello.og cc hello.o-o hello# 生成可执行程序hello,这里我们需要指定可执行程序的名称,否则会默认生成a.out甚至有时候,我们会一步到位:g cc hello.c-o hello# 编译链接,生成可执行程序hello1.1G C C其它选项选项含义-Wall生成所有警告信息-O0,-O1,-O2,-O3编译器的4个优化级别,-O0表示不优化,-O1为缺省值,-O3的优化级别最高-g指示编译器在编译的时候产生调试相关的信息。

(调试程序必须加上这个选项)-Dmacro相当于在文件的开头加了#define macro-Dmacro=value相当于在文件的开头加了#define macro value-Idir对于#include "file",gcc/g++会先在当前目录查找你所指定的头文件,如果没有找到,他会到系统的 include 目录找.如果使用-I 指定了目录,他会先在你所指定的目录查找,然后再按常规的顺序去找。

linuxgcc命令及用法

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编译选项

linux下gcc编译选项

linux下gcc编译选项(1)c/c++编译过程编译⼀个.cpp⽂件时,经过处理、编译、汇编和链接 4 个步骤,⽣成⼀个可执⾏程序:gcc编译过程1. 预处理:将(include)的⽂件插⼊原⽂件中、将宏定义展开、根据条件编译命令选择要使⽤的代码2. 编译:将预处理得到的源代码⽂件,进⾏“翻译转换”,⽣成汇编代码(编译阶段要检查代码的规范性、是否有语法错误,如函数、变量是否被声明等)3. 汇编:将汇编代码翻译成了机器码,表现为⼆进制⽂件4. 链接:将汇编⽣成的.o⽂件及其他函数库⽂件链接起来,⽣成能在特定平台上运⾏的可执⾏程序(在链接程序时,链接器会在所有的⽬标⽂件中找寻函数的实现。

如果找不到,那到就会报链接错误码(LinkerError))(2)gcc编译选项1. 常⽤命令选项1 --version 查看gcc版本号2 -std 指定C或C++语⾔标准版本。

⽐如 -std=c89,-std=c99等是C语⾔的标准版本号。

-std=c++11,-std=c++14等就是C++语⾔的标准版本号3 -o 指定输出⽂件,如果没有-o,输出有可能直接到stdout,有可能到默认的a.out⽂件4 -E 只做pre-process,预编译,要使⽤-o指定输出⽂件,此时⽂件⼀般都⽤.i结尾5 -S(⼤写)编译到(assembly)汇编,使⽤-o指定输出⽂件,此时⽂件⼀般都⽤.s结尾;6 -c 只编译,不链接,⽤-o指定输出⽂件,此时⽂件⼀般⽤.o结尾7 -g 附加debug信息,在输出的.o和可执⾏⽂件中,有很多.debug段。

(compile for debugging)8 -static⽤静态链接的⽅式编译,默认是动态链接,静态链接⽣产的⽂件体积会很⼤9 -shared ⽣成.so动态链接库10 -fPIC ⼀般在创建.so动态链接库的时候,都要加上-fPIC参数。

11 -fPIC 作⽤于编译阶段,告诉编译器产⽣与位置⽆关代码(Position-Independent Code),则产⽣的代码中,没有绝对地址,全12部使⽤相对地址,故⽽代码可以被加载器加载到内存的任意位置,都可以正确的执⾏。

GCC常用命令详解

GCC常用命令详解

GCC常⽤命令详解GCC(GNU Compiler Collection)是Linux下最常⽤的C语⾔编译器,是GNU项⽬中符合ANSI C标准的编译系统,能够编译⽤C、C++和Object C等语⾔编写的程序。

同时它可以通过不同的前端模块来⽀持各种语⾔,如Java、Fortran、Pascal、Modula-3和Ada等。

穿插⼀个玩笑: GNU意思是GNU’s not Unix⽽⾮⾓马。

然⽽GNU还是⼀个未拆分的连词,这其实是⼀个源于hacker的幽默:GNU是⼀个回⽂游戏,第⼀个字母G是凑数的,你当然可以叫他做ANU或者BNU。

下⾯开始。

⼀.CC编译程序过程分四个阶段◆预处理(Pre-Processing)◆编译(Compiling)◆汇编(Assembling)◆链接(Linking)Linux程序员可以根据⾃⼰的需要让GCC在编译的任何阶段结束转去检查或使⽤编译器在该阶段的输出信息,或者对最后⽣成的⼆进制⽂件进⾏控制,以便通过加⼊不同数量和种类的调试代码来为今后的调试做好准备。

如同其他的编译器,GCC也提供了灵活⽽强⼤的代码优化功能,利⽤它可以⽣成执⾏效率更⾼的代码。

GCC提供了30多条警告信息和三个警告级别,使⽤它们有助于增强程序的稳定性和可移植性。

此外,GCC还对标准的C和C++语⾔进⾏了⼤量的扩展,提⾼程序的执⾏效率,有助于编译器进⾏代码优化,能够减轻编程的⼯作量。

⼆.简单编译命令我们以Hello world程序来开始我们的学习。

代码如下:/* hello.c */#include <stdio.h>int main(void){printf ("Hello world!\n");return 0;}1. 执⾏如下命令:$ gcc -o hello hello.c运⾏如下: $ ./hello输出: Hello,world!2. 我们也可以分步编译如下:(1) $ gcc –E hello.c -o hello.i//预处理结束//这时候你看⼀下hello.i ,可以看到插进去了很多东西。

Linux下安装gcc、g++、gfortran编译器

Linux下安装gcc、g++、gfortran编译器

Linux下安装gcc、g++、gfortran编译器⼀、ubuntu下gcc/g++/gfortran的安装1.安装(1).gccubuntu下⾃带gcc编译器。

可以通过“gcc -v”命令来查看是否安装。

(2).g++安装g++编译器,可以通过命令“sudo apt-get install build-essential”实现。

执⾏完后,就完成了gcc,g++,make的安装。

build-essential是⼀整套⼯具,gcc,libc等等。

通过“g++ -v”可以查看g++是否安装成功。

注:“sudo apt-get install build-essential --fix-missing”,这个命令是修补安装build-essential,即已安装了部分build-essential,但没有安装完全,此时可以使⽤该命令继续安装build-essential。

(3).gfortran输⼊命令:sudo apt-get install gfortran通过命令“gfortran -v”,可以查看gfortran是否安装成功。

2.通过apt-get install安装软件后,软件的安装⽬录1.通过apt-get install 命令安装了⼀些软件,但这些软件的源码以及那些安装完以后的⽂件放在哪个⽂件夹下⾯?可以通过以下两种⽅式查看:(1).在terminal中输⼊命令:dpkg -L 软件名eg:dpkg -L gccdpkg -L gcc-4.4dpkg -L g++dpkg -L g++-4.4(2).在新⽴得中搜索到你已经安装的软件包,选中点属性(或右键),点属性对话框中的“已安装的⽂件”即可看到。

⼆.CentOS下gcc/g++/gfortran的安装1.安装再ubuntu下直接apt-get install gcc g++就可以了。

按照类似的逻辑,再CentOS下yum install gcc g++ 报告⽆法找到g++包。

linux中gcc命令的详细解释

linux中gcc命令的详细解释

linux中gcc命令的详细解释linxu下的gcc命令其实是GNU C Compiler的缩写,下面由店铺为大家整理了linux的gcc命令的详细解释的相关知识,希望对大家有帮助!一、linux中的gcc命令的详细解释gcc命令gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。

现在很多程序员都应用GCC,怎样才能更好的应用GCC。

目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。

语法gcc(选项)(参数)选项-o:指定生成的输出文件;-E:仅执行编译预处理;-S:将C代码转换为汇编代码;-wall:显示警告信息;-c:仅执行编译操作,不进行连接操作。

参数C源文件:指定C语言源代码文件。

二、linux中的gcc命令的详解实例常用编译命令选项假设源程序文件名为test.c无选项编译链接gcc test.c将test.c预处理、汇编、编译并链接形成可执行文件。

这里未指定输出文件,默认输出为a.out。

选项 -ogcc test.c -o test将test.c预处理、汇编、编译并链接形成可执行文件test。

-o选项用来指定输出文件的文件名。

选项 -Egcc -E test.c -o test.i将test.c预处理输出test.i文件。

选项 -Sgcc -S test.i 将预处理输出文件test.i汇编成test.s文件。

选项-c gcc -c test.s将汇编输出文件test.s编译输出test.o文件。

无选项链接gcc test.o -o test将编译输出文件test.o链接成最终可执行文件test。

选项 -Ogcc -O1 test.c -o test使用编译优化级别1编译程序。

级别为1~3,级别越大优化效果越好,但编译时间越长。

多源文件的编译方法如果有多个源文件,基本上有两种编译方法:假设有两个源文件为test.c和testfun.c多个文件一起编译gcc testfun.c test.c -o test将testfun.c和test.c分别编译后链接成test可执行文件。

Linux编程 gcc编译器

Linux编程  gcc编译器

Linux编程gcc编译器Fedora中总包含最近版本的gcc编译器,gcc原名为GNU C Compiler。

该编译器最开始时定位于C语言编译器,经过多年的发展GCC已经不仅仅能支持C语言;它现在还支持Ada语言、C++语言、Java语言、Objective C语言、Pascal语言和COBOL语言等。

gcc也不再单只是GNU C Compiler的意思了,而是变成了GNU Compiler Collection也即是GNU编译器家族。

1.初识gcc在安装Fedora Core 6时,如果选择安装开发工具包后,则gcc编译器就已经被息,如图13-11所示。

图13-11 gcc版本信息上述信息表示系统中没有找到gcc的相关版本信息,那么可能在系统中没有安装该编译器。

此时用户可以选择【应用程序】|【添加/删除软件】命令,在打开的【软件包管理者】对话框中选择开发工具包,安装gcc编译器。

2.gcc规则gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。

在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。

而gcc则通过后缀来区别输入文件的类别,首先来介绍gcc编译器所遵循的部分约定规则。

●.c为后缀的文件,C语言源代码文件。

●.a为后缀的文件,是由目标文件构成的档案库文件。

●.C,.cc或.cxx 为后缀的文件,是C++源代码文件。

●.h为后缀的文件,是程序所包含的头文件。

●.i 为后缀的文件,是已经预处理过的C源代码文件。

●.ii为后缀的文件,是已经预处理过的C++源代码文件。

●.m为后缀的文件,是Objective-C源代码文件。

●.o为后缀的文件,是编译后的目标文件。

●.s为后缀的文件,是汇编语言源代码文件。

●.S为后缀的文件,是经过预编译的汇编语言源代码文件。

Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作方法

Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作方法

Linux下C开发环境的搭建过程---gcc、glibc安装和升级操作⽅法Linux下C开发环境的搭建过程——安装gcc前⾔在Linux系统中,软件安装程序⽐较纷繁复杂,不过最常见的有两种:1)⼀种是软件的源代码,您需要⾃⼰动⼿编译它。

这种软件安装包通常是⽤gzip压缩过的tar包(后缀为.tar.gz)。

2)另⼀种是软件的可执⾏程序,你只要安装它就可以了。

这种软件安装包通常被是⼀个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。

Linux和C天⽣就有不解之缘,Linux操作系统的内核主要就是⽤C写的,另外Linux下的很多软件也是⽤C写的,特别是⼀些著名的服务软件,⽐如MySQL、Apache等。

初学者在编译MySQL这样的软件时,可能遇到过各式各样的错误,其实只要你初步了解了Linux的C开发环境,你就能⾃⾏解决这些错误。

Linux的C开发环境与Windows的有所不同,在Linux下,⼀个完整的C开发环境由以下三个部分组成:1、函数库:glibc要构架⼀个完整的C开发环境,Glibc是必不可少的,它是Linux下C的主要函数库。

Glibc有两种安装⽅式:A、安装成测试⽤的函数库——在编译程序时⽤不同的选项来试⽤新的函数库B、安装成主要的C函数库——所有新编译程序均⽤的函数库Glibc含⼏个附加包:LinuxThreads、locale和crypt,通常它们的⽂件名随版本不同⽽类似于下列⽂件名:glibc-2.06.tar.gzglibc-linuxthreads-2.0.6.tar.gzglibc-localedate-2.0.6.tar.gzglibc-crypt-2.0.6.tar.gz2、编译器:gccgcc(GNU CCompiler)是GNU推出的功能强⼤、性能优越的多平台编译器,gcc编译器能将C、C++语⾔源程序、汇编程序和⽬标程序编译、连接成可执⾏⽂件,以下是gcc⽀持编译的⼀些源⽂件的后缀及其解释:3、系统头⽂件:glibc_header缺少了系统头⽂件的话,很多⽤到系统功能的C程序将⽆法编译。

linux下安装gcc详解

linux下安装gcc详解

linux下安装gcc详解1、了解⼀下gcc ⽬前,GCC可以⽤来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语⾔的程序,可根据需要选择安装⽀持的语⾔。

我⾃⼰linux上是4.1.2版本,是不⽀持openMP的,⽽⾃⼰⼜要⽤到openMP,所以⾃⼰在原来的基础上安装了⼀个4.2以上版本的。

在安装之前,系统必须有cc或者gcc的编译器,如果没有,就不能安装更⾼版本的gcc了,如果是这种情况,可以在⽹上找⼀个与你系统相适应的如RPM等⼆进制形式的GCC软件包来安装使⽤。

本⽂介绍的是以源代码安装gcc的过程,我安装的是在⼀个单独的⽬录下,以后想卸载的话,直接删除该⽬录就⾏,本⽂介绍的是安装4.3.4版本的详细过程。

只需要按照以下步骤来⼀步⼀步安装就⾏。

2、需要下载的安装包2.1 下载gcc 下载⽹址是/gnu/gcc/,可以根据⾃⼰的需要下载哪个版本,我选择的是4.3.4版本。

⾥⾯有gcc-4.3.4.tar.bz2,gcc-4.3.4.tar.gz,任意选⼀个就⾏,它们是完全⼀个样的。

我选择的是gcc-4.3.4.tar.gz。

还可以查看Changes: /gcc-4.5/changes.htm,相⽐上⼀个版本有哪些改变,⾃⼰随便看就⾏2.2 下载3个依赖包 ⼀个是mpc,⼀个是gmp,⼀个是mpfr,下载地址依次为:ftp:///gnu/mpc/mpc-1.0.2.tar.gz,ftp:///gnu/gmp/gmp-5.0.1.tar.bz2,/gnu/mpfr/mpfr-3.1.2.tar.gz。

安装的顺序依次为:GMP,mpfr, mpc,最后安装gcc。

我开始就直接安装gcc,在配置过程出现以下信息:configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.Try the --with-gmp, --with-mpfr and/or --with-mpc options to specifytheir locations. 提⽰安装gcc之前,必须安装GMP 4.2以上版本,MPFR2.3.1以上版本, MPC 0.8.0以上版本。

linux gcc编译命令

linux gcc编译命令

linux gcc编译命令
GCC是 Linux系统下的一个很常用的开源编译器。

使用GCC编译
C/C++程序,大致需要按以下步骤进行:
1、准备工作:确定要编译的程序源码文件,源码文件通常以 .c
或 .cpp结尾。

2、编译阶段:使用GCC命令进行编译,编译完成后生成目标文件,
比如 a.out 或者带有其它后缀的文件名。

3、链接阶段:使用GCC将目标文件与静态库链接在一起,最终生成
可执行文件。

4、执行文件:使用./<文件名>命令运行可执行文件,查看其执行结果。

常用的GCC编译命令为:
1、gcc [选项参数] 源文件名 -o<输出文件名>,该命令可以进行编译,默认输出文件名为 a.out 。

2、gcc [选项参数] 源文件名 -c,该命令仅进行编译,不进行链接,源文件编译生成 .o 格式的文件。

3、gcc [选项参数] 源文件名 -S,该命令仅进行编译,不进行汇编,源文件编译生成 .s 格式的文件。

4、gcc [选项参数] 汇编文件名 -c,该命令进行汇编并编译,汇编
文件编译生成 .o 格式的文件。

5、gcc [选项参数] 目标文件名 -o<输出文件名>,该命令可以链接多个 .o 格式的文件,最终生成可执行文件。

6、gcc [选项参数] 动态库文件名 -shared -o<输出文件名>,该命令将多个 .o 格式的文件链接成动态库,最终生成动态库文件。

7、g++[选项参数]源文件名-o<。

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

1.8 Linux 上的C/C++ 编译器和调试器/man/linux_tsinghua/compiler.html∙运行 gcc/egcs∙gcc/egcs 的主要选项∙gdb∙gdb 的常用命令∙gdb 使用范例∙其他程序/库工具 (ar, objdump, nm, size, strings, strip, ...)1.8.1 运行 gcc/egcsLinux 中最重要的软件开发工具是 GCC。

GCC 是 GNU 的 C 和 C++ 编译器。

实际上,GCC 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。

利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。

#DEMO#: hello.c如果你有两个或少数几个 C 源文件,也可以方便地利用 GCC 编译、连接并生成可执行文件。

例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。

清单 factorial.c-----------------------#include#includeint factorial (int n){if (n <= 1)return 1;elsereturn factorial (n - 1) * n;}----------------------------------------------清单 main.c-----------------------#include#includeint factorial (int n);int main (int argc, char **argv){int n;if (argc < 2) {printf ("Usage: %s n\n", argv [0]);return -1;}else {n = atoi (argv[1]);printf ("Factorial of %d is %d.\n", n, factorial (n));}return 0;}-----------------------利用如下的命令可编译生成可执行文件,并执行程序:$ gcc -o factorial main.c factorial.c$ ./factorial 5Factorial of 5 is 120.GCC 可同时用来编译 C 程序和 C++ 程序。

一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C++ 程序。

在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。

但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。

因此,通常使用 g++ 命令来完完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。

假设我们有一个如下的 C++ 源文件(hello.C):#includevoid main (void){cout << "Hello, world!" << endl;}则可以如下调用 g++ 命令编译、连接并生成可执行文件:$ g++ -o hello hello.C$ ./helloHello, world!1.8.2 gcc/egcs 的主要选项表 1-3 gcc 命令的常用选项选项解释-ansi 只支持 ANSI 标准的 C 语法。

这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。

-c 只编译并生成目标文件。

-DMACRO 以字符串“1”定义 MACRO 宏。

-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。

-E 只运行 C 预编译器。

-g 生成调试信息。

GNU 调试器可利用该信息。

-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。

-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。

-lLIBRARY 连接时搜索指定的函数库LIBRARY。

-m486 针对 486 进行代码优化。

-o FILE 生成指定的输出文件。

用在生成可执行文件时。

-O0 不进行优化处理。

-O 或 -O1 优化生成代码。

-O2 进一步优化。

-O3 比 -O2 更进一步优化,包括 inline 函数。

-shared 生成共享目标文件。

通常用在建立共享库时。

-static 禁止使用共享连接。

-UMACRO 取消对 MACRO 宏的定义。

-w 不生成任何警告信息。

-Wall 生成所有警告信息。

1.8.3 gdbGNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。

在 X Window 系统中,有一个 gdb 的前端图形工具,称为 xxgdb。

gdb 是功能强大的调试程序,可完成如下的调试任务:* 设置断点;* 监视程序变量的值;* 程序的单步执行;* 修改变量的值。

在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。

可在 makefile 中如下定义 CFLAGS 变量:CFLAGS = -g运行 gdb 调试程序时通常使用如下的命令:gdb progname在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:* aliases:命令别名* breakpoints:断点定义;* data:数据查看;* files:指定并查看文件;* internals:维护命令;* running:程序执行;* stack:调用栈查看;* statu:状态查看;* tracepoints:跟踪程序执行。

键入 help 后跟命令的分类名,可获得该类命令的详细清单。

1.8.4 gdb 的常用命令表 1-4 常用的 gdb 命令命令解释break NUM 在指定的行上设置断点。

bt 显示所有的调用栈帧。

该命令可用来显示函数的调用顺序。

clear 删除设置在特定源文件、特定行上的断点。

其用法为:clear FILENAME:NUM。

continue 继续执行正在调试的程序。

该命令用在程序由于处理信号或断点而致停止运行时。

display EXPR 每次程序停止后显示表达式的值。

表达式由程序定义的变量组成。

file FILE 装载指定的可执行文件进行调试。

help NAME 显示指定命令的帮助信息。

info break 显示当前断点清单,包括到达断点处的次数等。

info files 显示被调试文件的详细信息。

info func 显示所有的函数名称。

info local 显示当函数中的局部变量信息。

info prog 显示被调试程序的执行状态。

info var 显示所有的全局和静态变量名称。

kill 终止正被调试的程序。

list 显示源代码段。

make 在不退出 gdb 的情况下运行 make 工具。

next 在不单步执行进入其他函数的情况下,向前执行一行源代码。

print EXPR 显示表达式 EXPR 的值。

1.8.5 gdb 使用范例-----------------清单一个有错误的 C 源程序 bugging.c-----------------#include#includestatic char buff [256];static char* string;int main (){printf ("Please input a string: ");gets (string);printf ("\nYour string is: %s\n", string);}-----------------上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。

该程序使用了一个未经过初始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误:$ gcc -o test -g test.c$ ./testPlease input a string: asfdSegmentation fault (core dumped)为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行:1.运行 gdb bugging 命令,装入 bugging 可执行文件;2.执行装入的 bugging 命令;3.使用 where 命令查看程序出错的地方;4.利用 list 命令查看调用 gets 函数附近的代码;5.唯一能够导致 gets 函数出错的因素就是变量 string。

用 print 命令查看string 的值;6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第11 行处设置断点;7.程序重新运行到第 11 行处停止,这时,我们可以用 set variable 命令修改 string 的取值;8.然后继续运行,将看到正确的程序运行结果。

#DEMO#1.8.6 其他程序/库工具strip:nm:size:string:。

相关文档
最新文档