gcc 订阅
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。) [1]  GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由 [2]  。 展开全文
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。) [1]  GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由 [2]  。
信息
软件授权
GNU通用公共许可证(GNU GPL)
软件名称
GNU Compiler Collection
更新时间
2019-02-22
编写语言
C/C++
软件版本
8.3.0
软件平台
类Unix操作系统
软件语言
多国语言
开发商
Free Software Foundation (自由软件基金会)
gcc简介
GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。GCC支持多种计算机体系结构芯片,如x86、ARM、MIPS等,并已被移植到其他多种硬件平台 [1]  。GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection) [1]  。
收起全文
精华内容
下载资源
问答
  • 2021-05-10 06:02:17

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

    因项目要求,需要在Redhat Linux原本安装有GCC4.1.2的基础上,再安装GCC4.5.1。

    安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。

    如果系统上没有编译器,不能安装源代码形式的GCC 4.5.1。

    如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。

    本文介绍的是以源代码形式提供的GCC软件包的安装过程,

    软件包本身和其安装过程同样适用于其它Linux和Unix系统。

    系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。

    与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下

    。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);

    缺点是在安装完成后要做一些设置工作才能使编译器工作正常。

    在本文中采用这个方案安装GCC 4.5.1,并且在安装完成后,

    仍然能够使用原来低版本的GCC编译器,

    即一个系统上可以同时存在并使用多个版本的GCC编译器。

    按照本文提供的步骤和设置选项,即使以前没有安装过GCC,

    也可以在系统上安装上一个可工作的新版本的GCC编译器。

    1. 下载

    在GCC网站上()或者通过网上搜索可以查找到下载资源。

    下载:

    浏览:

    查看Changes: /gcc-4.5/changes.htm

    可供下载的文件一般有两种形式:gcc-4.5.1.tar.gz和gcc-4.5.1.tar.bz2,

    只是压缩格式不一样,内容完全一致,下载其中一种即可。

    2. 解压缩

    拷贝gcc-4.5.1.tar.bz2(我下载的压缩文件)到/usr/local/src(根据自己喜好选择)下,

    根据压缩格式,选择下面相应的一种方式解包:

    $ tar zxvf gcc-4.1.2.tar.gz

    或者

    $ tar jxvf gcc-4.5.1.tar.bz2

    新生成的gcc-4.5.1这个目录被称为源目录,用${srcdir}表示它。

    以后在出现${srcdir}的地方,应该用真实的路径来替换它。

    用pwd命令可以查看当前路径。

    在${srcdir}/INSTALL目录下有详细的GCC安装说明,

    可用浏览器打开index.html阅读。

    3. 建立目标目录

    目标目录(用${objdir}表示)是用来存放编译结果的地方。

    GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),

    最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

    例如,可以这样建立一个叫 /usr/local/gcc-4.5.1的目标目录:

    $ mkdir /usr/local/gcc-4.5.1

    $ cd gcc-4.5.1

    以下的操作主要是在目标目录 ${objdir} 下进行。(否则会出错,后面有解释)

    4. 配置

    配置的目的是决定将GCC编译器安装到什么地方(${destdir}),

    支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

    配置是通过执行${srcdir}下的configure来完成的。

    其命令格式为(记得用你的真实路径替换${destdir}):

    % ${srcdir}/configure --prefix=${destdir} [其它选项]

    例如,如果想将GCC 4.5.1安装到/usr/local/gcc-4.5.1目录下,则${destdir}就表示这个路径。

    我是这样配置的:

    $ ../gcc-4.5.1/configure --prefix=/usr/local/gcc-4.5.1 --enable-threads=posix

    --disable-checking --enable--long-long --enable-languages=c,c++,java

    将GCC安装在/usr/local/gcc-4.5.1目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

    1)出现配置错误提示:

    checking build system type... x86_64-unknown-linux-gnu

    checking host system type... x86_64-unknown-linux-gnu

    checking target system type... x86_64-unknown-linux-gnu

    checking for a BSD-compatible install... /usr/bin/install -c

    checking whether ln works... yes

    checking whether ln -s works... yes

    checking for a sed that does not truncate output... /bin/sed

    checking for gawk... gawk

    checking for gcc... gcc

    checking for C compiler default output file name... a.out

    checking whether the C compiler works... yes

    checking whether we are cross compiling... no

    checking for suffix of executables...

    checking for suffix of object files... o

    checking whether we are using the GNU C compiler... yes

    checking whether gcc accepts -g... yes

    checking for gcc option to accept ISO C89... none needed

    checking for g++... g++

    checking whether we are using the GNU C++ compiler... yes

    checking whether g++ accepts -g... yes

    checking for gnatbind... no

    checking for gnatmake... no

    checking whether compiler driver understands Ada... no

    checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2

    checking for objdir... .libs

    checking for the correct version of gmp.h... no

    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 specify

    their locations.  Source code for these libraries can be found at

    their respective hosting sites as well as at

    ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also

    /install/prerequisites.html for additional info.  If

    you obtained GMP, MPFR and/or MPC from a vendor distribution package,

    make sure that you have installed both the libraries and the header

    files.  They may be located in separate packages.

    2)解决办法:

    下载

    $ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz

    $ wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2

    下载gmp-5.0.1.tar.bz2

    $wget mpfr-3.1.2.tar.gz

    下载mpfr-3.1.2.tar.gz。

    先开始安装GMP。

    解压GMP的压缩包后,得到源代码目录gmp-5.0.1。

    在该目录的同级目录下建立一个临时的编译目录,这里命名为temp。

    $ tar -jxvf gmp-5.0.1.tar.bz2

    $ cd gmp-5.0.1

    $ mkdir temp

    $ cd temp

    然后开始配置安装选项,进入temp目录,输入以下命令进行配置:

    $ ../configure --prefix=/usr/local/gmp-5.0.1

    $ make

    $ make install

    mpfr和mpc的安装方法与gmp类似。

    不过要注意配置的时候要把gmp与mpfr的依赖关系选项加进去,

    具体命令如下:

    再安装mpfr

    $ tar -zxvf mpfr-3.1.2.tar.gz

    $ cd mpfr-3.1.2

    $ mkdir temp

    $ cd temp

    $ ../configure --prefix=/usr/local/mpfr-3.1.0 --with-gmp=/usr/local/gmp-5.0.1

    $ make

    $ make install

    最后安装mpc

    $ tar -zxvf mpc-1.0.2.tar.gz

    $ cd mpc-1.0.2

    $ mkdir temp

    $ cd temp

    $ ../configure --prefix=/usr/local/mpc-1.0.2 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0

    $ make

    $ make install

    安装好这三个库之后,就可以正式开始安装gcc了。

    当然了链接的时候,需要刚刚编译的3个lib。

    $ vim /etc/profile

    在最后一行加入:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.0.2/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-3.1.0/lib

    保存并退出

    $ source /etc/profile

    然后是典型的configure,make,install三步曲。

    $ ./configure --prefix=/usr/local/gcc-4.5.1 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++

    --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0 --with-mpc=/usr/local/mpc-1.0.2

    $ make

    $ make check(可选)

    $ sudo make install

    经过漫长的等待,检查一下成果:

    $ /usr/local/gcc-4.5.1/bin/gcc4.5.1 -v

    Using built-in specs.

    COLLECT_GCC=/usr/local/gcc-4.5.1/bin/gcc4.5.1

    COLLECT_LTO_WRAPPER=/usr/local/gcc-4.5.1/libexec/gcc/x86_64-unknown-linux-gnu/4.5.1/lto-wrapper

    Target: x86_64-unknown-linux-gnu

    Configured with: ./configure --prefix=/usr/local/gcc-4.5.1 --enable-threads=posix --enable-checking=release --program-suffix=4.5.1

    --enable--long-long --enable-languages=c,c++,java --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0 --with-mpc=/usr/local/mpc-1.0.2

    Thread model: posix

    gcc version 4.5.1 (GCC)

    表示安装成功了!!!

    5. 编译

    $ make

    6. 安装

    执行下面的命令将编译好的库文件等拷贝到${destdir}目录中

    (根据你设定的路径,可能需要管理员的权限):

    $ make install

    至此,GCC 4.5.1安装过程就完成了。

    7. 其它设置

    GCC 4.5.1的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,

    如命令文件放在bin目录下、库文件在 lib下、头文件在include下等。

    由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,

    所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

    7.1 gcc、g++、gcj的设置

    要想使用GCC 4.5.1的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。

    我不用这种方式,而是用符号连接的方式实现,

    这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

    首先,查看原来的gcc所在的路径:

    $ which gcc

    在我的系统上,上述命令显示:/usr/bin/gcc。

    因此,原来的gcc命令在/usr/bin目录下。

    我们可以把GCC 4.5.1中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

    $ cd /usr/bin

    $ ln -s ${destdir}/bin/gcc4.5.1 gcc451

    $ ln -s ${destdir}/bin/g++4.5.1 g++451

    $ ln -s ${destdir}/bin/gcj4.5.1 gcj451

    这样,就可以分别使用gcc451、g++451、gcj451来调用GCC 4.5.1的gcc、g++、gcj

    完成对C、C++、JAVA程序的编译了。

    同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

    (cool,我感觉棒极了!!1)

    7.2 库路径的设置

    将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,

    例如,如果GCC 4.5.1安装在/usr/local/gcc-4.5.1目录下,在RH Linux下可以直接在命令行上执行

    $ export LD_LIBRARY_PATH=/usr/local/gcc-4.5.1/lib

    最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,

    在文件/etc/profile中添加下面两句:

    LD_LIBRARY_PATH=/usr/local/gcc-4.5.1/lib:$LD_LIBRARY_PATH

    export LD_LIBRARY_PATH

    重启系统设置生效,或者执行命令

    % source /etc/profile

    用新的编译命令(gcc451、g++451等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

    完成了Linux安装GCC,之后你就能轻松地编辑了。

    参考链接:

    http://www.cnblogs.com/chuncn/archive/2010/10/15/1851853.html

    阅读(917) | 评论(0) | 转发(0) |

    更多相关内容
  • gccgcc-c++离线安装包

    2019-08-10 14:57:56
    从mini安装版centos7.5提取出来的gccgcc-c++安装包,下载后放到服务器解压,并cd到该目录,执行 rpm -Uvh *.rpm,安装完成后,运行gcc -v,g++ -v,会出现版本信息,则完成
  • 在linux裸机上要装nginx,但是没有gccgcc-c++环境,又不能连yum云,只能自己下载然后安装,网上找了好多,都没有完整的依赖包,千辛万苦终于搞定了,现在分享给大家,亲测可用~
  • GCC-9.2.0离线安装包.zip

    2019-10-06 18:58:27
    GCC-9.2.0离线安装包:附带gcc必需的依赖文件,离线安装gcc所需文件
  • 用于无法连接到外网的linux服务器安装gcc服务的安装包。 用于无法连接到外网的linux服务器安装gcc服务的安装包。 用于无法连接到外网的linux服务器安装gcc服务的安装包。
  • 支持linux离线安装gcc运行环境;在安装rabbit或者 是nginx时我们需要gcc环境,此时需要各种依赖包 ,特定收集整理并形成文档,希望对其他人有帮助,解压 后看readme文档。操作步骤:1.将文件解压到指定目录 2.进入该...
  • 内包含三个gcc必备安装包内包含三个gcc必备安装包内包含三个gcc必备安装包内包含三个gcc必备安装包内包含三个gcc必备安装包内包含三个gcc必备安装包
  • mingw-w64 gcc 7.1.0安装包

    热门讨论 2017-06-02 12:03:33
    mingw 64位 gcc 7.1.0 安装包。用于64位Windows系统gcc编译,解压后把bin目录追加到系统变量Path即可。如Windows 10,解压后路径为D:\mingw-w64\bin,右键"我的电脑">"高级">"环境变量">"系统变量"选中"Path"点右边...
  • gcc-c++rpm安装包centos7

    2018-02-07 17:20:36
    gcc-c++ rpm centos7 离线安装 解决yum在线安装不了情况
  • C , C++语言在windows下的编译器,gcc版本6.30,支持C++14标准
  • gcc_rpm.tar.gz

    热门讨论 2017-04-17 23:54:35
    gcc离线安装 rpm 安装包
  • gcc-3.4.6.rpm完整包

    千次下载 热门讨论 2014-10-15 14:51:18
    rpm -ivh gcc-3.4.6-11.i386.rpm --nodeps --force rpm -ivh gcc-c++-3.4.6-11.i386.rpm --nodeps --force rpm -ivh libstdc++-devel-3.4.6-11.i386.rpm --nodeps --force rpm -ivh libstdc++-3.4.6-11.i386.rpm --...
  • compiler-gcc6.h

    2016-10-26 14:32:52
    compiler-gcc6.h,安装GCC6后缺失compiler-gcc6.h,这个只是相对compiler-gcc5.h做了少许修改。
  • MinGW离线安装包(gcc-5.3)2018最新版,106M;MinGW离线安装包(gcc-5.3)2018最新版,106M
  • arm-linux-gcc交叉编译器 3.4.1

    热门讨论 2014-10-13 09:29:50
    arm-linux-gcc交叉编译器,版本3.4.1,用于Linux下的ARM开发。 安装方法: 1. tar zxvf arm-linux-gcc-3.4.1.tgz -C/ 2. 编辑 ~/.bashrc ,加入 export PATH=$PATH:/usr/local/arm/3.4.1/bin 3. 验证安装 [root@...
  • warning: gcc-c++-4.4.7-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: gcc = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.x86_64 libstdc++ = 4.4.7-...
  • gcc-4.4.7-4

    热门讨论 2014-06-02 10:43:29
    gcc编译文件,linux系统,64位。
  • arm-linux-gcc-4.9.1

    热门讨论 2014-11-28 09:14:39
    编译好的交叉编译工具,gcc版本为4.9.1,支持64位机。
  • gcc

    千次阅读 多人点赞 2019-10-18 17:47:12
    gcc:一个工具集合,包含预处理器,编辑器,汇编器,链接器等组件 说明:当不使用任何选项时,gcc将会生成一个名为a.out的可执行文件 gcc选项 gcc -E 预处理 .i gcc -S 编译成汇编代码 .s gcc -c 汇编成目标代码 .o ...
    • gcc:一个工具集合,包含预处理器,编辑器,汇编器,链接器等组件

    说明:当不使用任何选项时,gcc将会生成一个名为a.out的可执行文件

    • gcc选项
    1. gcc -E  预处理   .i
    2. gcc -S  编译成汇编代码   .s
    3. gcc -c  汇编成目标代码   .o
    4. gcc -o  链接成可执行代码  .out/.exe
    • gcc -E   只进行预处理
    1. gcc -E test.c  只进行预处理
    2. gcc -E test.c -o test.i  将test.c预处理后的代码放在test.i中
    • gcc -S    只进行编译,不进行汇编,生成汇编代码文件.s
    1. gcc -S test.c  //生成test1.s
    2. gcc -S test.i
    3. gcc -S test.i -o test.s    //-o选项用来指定输出文件名,将test.i编译之后的汇编代码放在test.s中
    • gcc -c   可以将每一个源文件编译成目标文件(.o文件),但不进行链接
    1. gcc -c test.c   //生成test.c
    2. gcc -c test.s
    • gcc -o      格式:gcc -o file file.c  将文件file.c编译成可执行文件file
    1. gcc -o test test.c
    2. gcc -o test test.o
    • gcc -g  在目标代码中加入供调试程序gdb使用的附加信息
    • gcc -Wall 显示警告信息
    1. gcc -Wall -o test test.c
    2. gcc  -g  -o  test  test.c
    • 库(Library)
    1. 静态库(.a)文件  在程序的链接阶段被复制到了程序中(gcc -o test test.c libtest.a)
    2. 动态库/共享库(.so)文件  程序在运行时由系统动态加载到内存中供程序调用(gcc -o test test.c libtest.so)
    • gcc优化选项
    1. gcc -O0:缺省情况,不优化
    2. gcc -O1:一级优化
    3. gcc -O2:
    4. gcc -O3:
    • 文件名及其文件类型:

    文件名后缀

    文件类型

    .h

    头文件

     .c

    C源文件

    .i

    预处理后的c源文件

    .s

    汇编程序文件

    .o

    目标文件

    .a

    静态链接库

    .so

    动态链接库

     

    展开全文
  • 【linux系统编程】基础开发工具:gcc/g++

    千次阅读 多人点赞 2022-02-25 22:14:50
    Linux C/C++ 编译器 – gcc/g++ 1. gcc/g++ 基本用法: gcc/g++ 分别是linux环境下 C/C++ 的编译器,其基本使用方法: [Assassin@Ninghai ~]$ gcc [选项] [编译文件] -o [可执行别名] [Assassin@Ninghai ~]$ g++ ...

    Linux C/C++ 编译器 – gcc/g++

    正文开始@Assassin
    

    1. gcc/g++ 基本用法:

    gcc/g++ 分别是linux环境下 C/C++ 的编译器,其基本使用方法:

    [Assassin@Ninghai ~]$ gcc [选项] [编译文件] -o [可执行别名] 
    [Assassin@Ninghai ~]$ g++ [选项] [编译文件] -o [可执行别名]
    

    在这里插入图片描述
    执行编译好的可执行程序 test,该文件可以类比 win环境下的 test.exe 文件,linux 环境下运行可执行程序需要带上该文件的路径 (绝对路径 or 相对路径都可),在这里就是 ./ 也就是相对路径 当前文件夹下:
    在这里插入图片描述

    2. C/C++编译基本步骤:

    gcc/g++分别是GNU (GNU Compiler Collection) 的C/C++编译器,gcc及g++在执行翻译过程 (因为步骤中有编译步骤,这里为了不冲突说成翻译) 的时候一般有以下四个步骤:

    • 预处理(头文件展开,去注释,宏替换,条件编译):生成 .i 文件
    • 编译(将预处理后的C/C++代码编译成汇编语言):生成 .s 文件
    • 汇编(将汇编代码转为二进制目标代码):生成 .o 文件
    • 链接(将汇编过程产生的二进制代码进行链接生成二进制可执行文件):生成可执行二进制文件,默认是 a.out ,可以用 -o 选项进行重命名

    在这里插入图片描述

    3. gcc/g++语法:

    语法: gcc/g++ [选项] [文件] -o [别名]

    常用选项:

    选项具体含义
    -E只进行预处理,此操作不生成文件,需要把它重定向到一个输出文件里面(否则将把预处理后的结果打印到屏幕上)
    -S编译到汇编语言,不进行汇编和链接,即只进行预处理和编译 (默认会生成 .s 文件)
    -c编译到目标二进制代码,即只进行预处理,编译和汇编(默认会生成 .o 文件)
    -o将处理结果输出到指定文件,该选项后需紧跟输出文件名,可简单理解为重命名
    -static此选项将采用静态链接的方式编译文件(gcc/g++默认编译是动态链接)
    -g添加调试信息生成debug版本,debug版本可使用gdb进行调试(若不携带该选项则默认生成release版本,release不可调试)
    -shared此选项将尽量使用动态库,生成文件较小
    -w不生成任何警告信息
    -Wall生成所有警告信息
    -O0/-O1/-O2/-O3编译器优化选项的四个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

    注:以下过程为演示g++的使用,gcc同理


    3.1 预处理:

    预处理的功能主要包括宏定义替换,头文件包含,条件编译,去注释等;预处理指令主要指以 # 开头的语句

    [Assassin@Ninghai c_code]$ g++ -E test.cc #完成预处理后停止
    

    g++ -E 选项不会默认生成 .i 文件,也就是会把预处理信息打印在stdout上:
    在这里插入图片描述

    [Assassin@Ninghai c_code]$ g++ -E test.cc -o test.i #完成预处理后停止
    

    使用 -o 选项重命名生成 -i 文件:less查看
    在这里插入图片描述

    • 预处理功能主要包括头文件展开、去注释、宏替换、条件编译等
    • 预处理指令是以 # 开头的代码行
    • -E 选项的作用是让 gcc/g++ 在预处理结束后停止编译过程
    • -o 选项可指定生成的目标文件名,简单来讲相当于重命名," xxx.i " 文件为已经进行过预处理的原始程序

    在这里插入图片描述

    3.2 编译:

    编译时,gcc/g++ 会检查代码的规范性、是否有语法错误,用来确定代码实际所需要做的工作,检查无误后 gcc 会生成汇编代码

    [Assassin@Ninghai c_code]$ g++ -S test.i -o test.s #完成编译后停止
    

    注意:这里 -S 选项不带 -o 选项也可生成 test.s 文件,带上只是为了统一格式
    在这里插入图片描述

    • ① 在阶段此中,gcc/g++ 首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,将代码翻译成汇编语言
    • ② 用户可以使用 -S 选项来进行翻译,该选项只进行预处理与编译,而不进行汇编,此过程过后生成汇编代码
    • ③ -o 选项可指定生成的目标文件名,简单来讲相当于重命名," xxx.s " 文件为已经进行过编译的原始程序

    在这里插入图片描述

    3.3 汇编:

    汇编阶段将编译所形成的汇编代码再翻译生成可重定向目标二进制文件 .o 文件,对应到 win 环境下也就是 .obj 文件;虽说是二进制文件,但也不可执行

    [Assassin@Ninghai c_code]$ g++ -c test.s -o test.o #完成汇编后停止
    

    注意:这里 -c 选项不带 -o 选项也可生成 test.o 文件,带上只是为了统一格式
    在这里插入图片描述

    • ① 汇编阶段是把编译阶段生成的 " xxx.s " 文件翻译成可重定向目标二进制文件 " xxx.o "
    • ② 使用 -c 选项可将汇编代码翻译成 " xxx.o " 目标文件
    • ③ -o 选项可指定生成的目标文件名,简单来讲相当于重命名," xxx.o " 文件为已经进行过汇编的原始程序

    在这里插入图片描述

    3.4 链接:

    预处理,编译,汇编三个阶段统称为翻译(编译)过程,完成了上述编译的过程,就到了翻译环境的最后一个阶段:链接;将多个目标二进制文件链接之后便可生成可执行二进制文件

    [Assassin@Ninghai c_code]$ g++ test.o -o test #链接完成
    

    在这里插入图片描述

    • ① 预处理,编译,汇编都成功完成之后,就来到链接操作
    • ② 链接的主要任务就是将生成的各个 " xxx.o " 文件与C/C++的动静态链接库进行链接,生成可执行文件
    • ③ gcc/g++ 不带 -E,-S,-c 选项时,就默认生成预处理,编译,汇编,链接全过程后的文件,相当于一步执行
    • ④ 若不用 -o 选项指定生成文件的文件名,则默认生成的可执行文件名为a.out

    链接是将所有.c 源文件所生成的目标文件与语言的链接库文件绑定在一起进行链接;如图所示:
    在这里插入图片描述
    在这里插入图片描述
    可以用 file 指令查看一下 test 文件的基本信息:
    在这里插入图片描述
    当然了,gcc/g++ 不带 -E,S,c 选项可一步到位生成可执行程序:
    一般来说 -o 的使用有如下两种方式,共同点是 -o 后面跟的一定是生成的可执行文件而不是源文件,个人推荐第一种:

    [Assassin@Ninghai c_code]$ g++ test.cc -o test # choice 1
    [Assassin@Ninghai c_code]$ g++ -o test test.cc # choice 2
    

    4. 动静态链接:

    4.1 函数库的概念:

    语言本身会提供链接库,库可以看成一套头文件和一套库文件;比如通常使用的 cout,cin 等库函数,都是在库文件中实现的,可以通过引用对应的头文件,来使用这些C语言已经为我们封装好的代码

    使用 ldd 命令可以查看可执行程序所依赖的C/C++库:
    在这里插入图片描述
    Linux 环境下C/C++的库文件一般是 libc.a (libstdc++.a)和 libc.so (libstdc++.so),分别是静态库和动态库;Windows 环境下的静态库和动态库的后缀分别为.lib和.dll;

    将用户所写的程序文件和第三方库提供的方法关联起来的过程称为链接;显然,链接又分为静态链接和动态链接,由上图可得知 test 文件的链接库是 .so,即 gcc/g++ 编译默认是动态链接

    4.2 动静态库:

    • 静态库是指编译链接时,把库文件的代码全部拷贝到可执行文件当中,因此生成的文件比较大,但在运行时也就不再需要库文件了,静态库在linux环境下一般以.a为后缀,win环境下一般是以.lib为后缀
    • 动态库与之相反,在编译链接时并没有把库文件的代码拷贝到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销,但是其可移植性一般来说比较差,因为缺少动态库的支持;动态库在linux环境下一般以.so为后缀,在win环境下一般是以 .dll 为后缀

    静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时才开始链接

    动态链接:

    • 优点: 节省空间(磁盘的空间,内存的空间),bin体积小,更新维护较为方便
    • 缺点: 依赖动态库,程序可移植性较差;因为把链接推迟到了程序运行时,所以每次执行程序都需要进行链接,性能会有一定损失,运行速度相对较慢

    静态链接:

    • 优点: 不依赖第三方库,程序的可移植性较高,执行速度较快
    • 缺点: 需要将库中的代码拷贝过来,体积较大,较为臃肿;如果有多个程序文件,那么每个程序中都会加入库文件的内容,包含相同的公共代码,造成浪费;此外,更新也较为麻烦,每当库函数的代码修改了,此时就需要重新进行打包成lib文件,再去编译链接形成可执行程序

    前面我们已经知道,gcc/g++默认采用的是动态链接的方式,这里也可以用 file 指令进行再一次验证:
    在这里插入图片描述
    虽然 gcc/g++ 默认采用的是动态链接,但如果需要使用静态链接,带上-static选项即可:
    在这里插入图片描述
    可以看到静态链接生成的文件确实比动态链接大得多 ^_^


    之前我个人在使用 -static 静态编译时出现了诸如以下等类似的报错

    /usr/bin/ld: cannot find -lc
    

    查找了Stack Overflow后发现是我的云服务器缺少或者找不到 libc.a 静态库,解决方法是:

    [Assassin@Ninghai c_code]$ sudo yum install -y glibc-static
    

    安装之后应该是可以进行静态编译的~~


    依然是使用 file 跟 ldd 查看 test_s 文件:
    在这里插入图片描述
    over

    展开全文
  • 1、下载gcc指定源码包

    目录

    gcc网址:

    1、下载gcc指定源码包

    2、解压压缩包,进入指定目录

    3、运行download_prerequisites脚本

    4、建立输出目录,并且进入目录

    5、执行命令

    6、编译

    7、安装

    8、验证是否成功


    gcc网址:

    Index of /gnu/gccicon-default.png?t=M3C8http://ftp.gnu.org/gnu/gcc/

    1、下载gcc指定源码包

    wget http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz
    

    2、解压压缩包,进入指定目录

    tar -xzvf gcc-7.5.0.tar.gz
    cd gcc-7.5.0
    

    3、运行download_prerequisites脚本

    ./contrib/download_prerequisites
    

    4、建立输出目录,并且进入目录

    mkdir build
    cd build

    5、执行命令

    ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    

    6、编译

    make 

    或者使用多线程(要小于自身电脑核心数)

    make -j8

    7、安装

    sudo make install

    8、验证是否成功

    gcc -v

    如果显示的gcc版本仍是以前的版本,就需要重启系统.

    展开全文
  • gcc离线安装包(我已安装成功了)

    热门讨论 2014-09-10 23:03:15
    gcc离线安装包,在不能上网的情况下安装gcc
  • GCC快速入门

    千次阅读 2021-05-17 10:24:21
    文章目录 目的 基础使用 C/C++混合编译 静态链接库和动态链接库 更多常用选项 总结 目的 GCC(GNU Compiler Collection)是GNU出品的用来编译 C、C++、Objective-C、Fortran、Ada、Go 等语言的一系列编译器集合。GCC...
  • GCC

    千次阅读 2019-06-07 11:27:28
    sudo apt-get install gcc / sudo apt-get install gcc++ 一、简介: gcc 最初是 “GNU C Compiler” 的简称,只是当作一个 C 语言的编译器,现在已经变成了 “GNU Compiler Collection”,可...
  • gcc、g++离线安装包

    热门讨论 2018-06-14 11:46:37
    linux环境下安装c++环境,主要包含gcc安装需要的各种库和g++安装需要的各种库。
  • solaris10_gcc和gdb安装包

    热门讨论 2013-03-30 14:36:55
    gcc-3.4.6-sol10-x86-local.gz gdb-6.8-sol10-x86-local.gz libiconv-1.14-sol10-x86-local.gz libintl-3.4.0-sol10-x86-local.gz ncurses-5.7-sol10-x86-local.gz 用于安装solaris10的gcc和gdb工具包
  • 【最简单方法】将ubuntu20.04中自带的gcc-9.4.0降级到gcc-4.8.5
  • 只有gcc-7.5.0,想安装低版本的gcc-4.8 biren@ubuntu:~$ cat /proc/version Linux version 5.4.0-84-generic (buildd@lcy01-amd64-007) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #94~18.04.1-Ubuntu SMP ...
  • mingw-w64-gcc-4.9.2

    热门讨论 2014-11-22 01:05:02
    gcc所有版本为4.9.2(两个版本相同的内置支持):个人使用newen的脚本+gcc-4.9.1重新编译版本,增加对isl和cloog的支持,包含32我和64位版本

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 769,718
精华内容 307,887
关键字:

gcc