-
2021-05-10 06:10:34
目前,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
阅读(38221) | 评论(0) | 转发(4) |
更多相关内容 -
Linux 下载GCC
2020-04-22 21:37:20Linux显示GCC不存在 下载GCC yum -y install gcc automake autoconf libtool make 检查是否安装成功 which GCC展开全文 -
gcc下载及安装教程
2022-02-23 11:31:07gcc下载及安装教程 作者:白鹿(花名) 注意:请提前获取root权限 1、gcc下载链接:http://ftp.gnu.org/gnu/gcc/gcc-5.1.0/ 2、解压相关下载压缩包(此处已提前下载,无需重复下载) tar xjvf gcc-5.1.0.tar.bz2 ...gcc下载及安装教程
作者:白鹿(花名)
注意:请提前获取root权限
1、gcc下载链接:http://ftp.gnu.org/gnu/gcc/gcc-5.1.0/
2、解压相关下载压缩包(此处已提前下载,无需重复下载)
tar xjvf gcc-5.1.0.tar.bz2
- 相关解压文件目前所停留路径:GPU-3
/home/op/bailu/bak
3、创建安装目录
mkdir /usr/local/gcc-5.1.0/
4、进入安装目录
cd /usr/local/gcc-5.1.0/
5、配置安装文件
/home/op/bailu/bak/gcc-5.1.0/configure --prefix=/usr/local/gcc-5.1.0
- 潜在BUG说明:配置过程中如果服务器环境中缺少gcc需要的相关依赖则可能出现如下错误,错误示例:
configure: error: in
/usr/local/gcc-5.1.0': configure: error: no acceptable C compiler found in $PATH** See
config.log’ for more details. 参考解决方案降低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 specify
their locations. 此种情况下需要安装相关的依赖包,相关文件下载链接,下载完成直接rz 到gpu-3即可:
https://gcc.gnu.org/pub/gcc/infrastructure/
特殊说明:由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。这里三个库我用的版本分别是gmp4.3.2,mpfr2.4.2和mpc0.8.1,都放在 /同一目录文件夹下。
相关包解压及安装参考流程, 说明具体目录名称以实际目录为主:
- 示例:gmp-4.3.2安装(具体目录名称以实际依赖的版本号为主)
1、解包:tar jxvf gmp-4.3.2.tar.bz2
2、创建安装目录:mkdir /usr/local/gmp-4.3.2
3、进入安装文件目录:cd /usr/local/gmp-4.3.2
4、配置安装文件:/服务器目录/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2
5、编译:make
6、执行安装:make install
- 示例: 安装mpfr2.4.2
1、解包:tar jxvf mpfr2.4.2.tar.bz2
2、创建安装目录:mkdir /usr/local/mpfr-2.4.2
3、进入安装目录:cd /usr/local/mpfr-2.4.2
4、配置安装文件:/服务器目录/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
5、编译:make
6、执行安装:make install
- 示例:安装mpc0.8.1
1、解包:tar jxvf gmpc0.8.1.tar.bz2
2、创建安装目录:mkdir /usr/local/mpc-0.8.1
3、进入安装目录:cd /usr/local/mpc-0.8.1
4、配置安装文件:/服务器目录/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2
5、编译:make
6、执行安装:make install
6、解决5中相关BUG之后继续安装GCC;
- 示例:安装gcc流程
1、切换到相关安装目录:cd /usr/local/gcc-5.1.0 建议:执行2之前,优先配置相关gcc依赖的环境变量(具体以实际版本号为主):export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib 2、配置安装文件(相关依赖名称以实际依赖版本号为主):/服务器目录/gcc-5.1.0/configure --prefix=/usr/local/gcc-5.1.0 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1 3、编译:make 大概需要1个小时左右 4、执行安装:make install
7、如果不出意外,那么到现在应该安装成功了,不过还是不能使用新版本的gcc,因为新版本的gcc还没有加入命令搜索路径中!
8、建立软链接
sudo ln -s /usr/local/gcc-5.1.0/bin/gcc gcc510 sudo ln -s /usr/local/gcc-5.1.0/bin/g++ g++510
9、添加环境变量
打开/etc目录下的bashrc文件添加如下代码:(具体版本目录以实际依赖为主) LD_LIBRARY_PATH=:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/gcc-5.1.0/lib export LD_LIBRARY_PATH
-
gcc命令大全
2018-12-11 23:11:05一、gcc的基本用法 使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。如果使用了多个 -L 的参数来定义库目录,gcc会...一、gcc的基本用法
使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录。
因为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数(short options),如 -dr 与 -d -r 的含义不一样。
gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。
gcc最基本的用法是:
gcc [options] [filenames]
其中,options就是编译器所需要的参数,filenames给出相关的文件名称,最常用的有以下参数:
-c :只编译,不链接成为可执行文件。编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename :确定输出文件的名称为output_filename。同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出默认的可执行文件 a.out 。
-g:产生符号调试工具(GNU的 gdb)所必要的符号信息。想要对源代码进行调试,就必须加入这个选项。
-O:对程序进行优化编译、链接。采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、链接的速度就相应地要慢一些,而且对执行文件的调试会产生一定的影响,造成一些执行效果与对应源文件代码不一致等一些令人“困惑”的情况。因此,一般在编译输出软件发行版时使用此选项。
-O2:比 -O 更好的优化编译、链接。当然整个编译链接过程会更慢。
-Idirname:将 dirname 所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。
说明:
C程序中的头文件包含两种情况:#include <stdio.h> #include "stdio.h"
其中,使用尖括号(<>),预处理程序 cpp 在系统默认包含文件目录(如/usr/include)中搜索相应的文件;使用双引号,预处理程序 cpp 首先在当前目录中搜寻头文件,如果没有找到,就到指定的 dirname 目录中去寻找。
在程序设计中,如果需要的这种包含文件分别分布在不同的目录中,就需要逐个使用 -I 选项给出搜索路径。-Ldirname:将dirname所指出的目录加入到程序函数库文件的目录列表中,是在链接过程中使用的参数。在默认状态下,链接程序 ld 在系统默认路径中(如 /usr/lib)寻找所需要的库文件。这个选项告诉链接程序,首先到 -L 指定的目录中去寻找,然后到系统默认路径中寻找;如果函数库存放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。
-lname:链接时装载名为 libname.a 的函数库。该函数库位于系统默认的目录或者由 -L 选项确定的目录下。例如,-lm 表示链接名为 libm.a 的数学函数库。
eg:
假定有一个程序名为 test.c 的C语言源代码文件,要生成一个可执行文件。#include <stdio.h> int main(void) { printf("Hello world/n"); return 0; }
最简单的办法:
gcc test.c -o test
首先,gcc需要调用预处理程序 cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着,gcc调用 ccl 和 as,将处理后的源代码编译成目标代码;最后,gcc调用链接程序 ld,把生成的目标代码链接成一个可执行程序。因此,默认情况下,预编译、编译链接一次完成。
编译过程的分步执行:为了更好地理解gcc的工作过程,我们可以让在gcc工作的4个阶段中的任何一个阶段中停止下来。相关的参数有:
-E
预编译后停下来,生成后缀为 .i 的预编译文件。
-c
编译后停下来,生成后缀为 .o 的目标文件。
-S
汇编后停下来,生成后缀为 .s 的汇编源文件。第一步:进行预编译,使用 -E 参数
gcc -E test.c -o test.i
查看 test.i 文件中的内容,会发现 stdio.h 的内容确实都插到文件里去了,而其他应当被预处理的宏定义也都做了相应的处理。
第二步:将 test.i 编译为目标代码,使用 -c 参数gcc -c test.c -o test.o
第三步:生成汇编源文件
gcc -S test.c -o test.s
第四步:将生成的目标文件链接成可执行文件
gcc test.o - o test
对于稍微复杂的情况,比如有多个源代码文件、需要链接库或有其他比较特别的要求,就要给定适当的调用选项参数:
eg:
整个源代码程序由两个文件 testmain.c 和 testsub.c 组成,程序中使用了系统提供的数学库(所有与浮点相关的数学运算都必须使用数学库)。gcc testmain.c testsub.c -lm -o test
其中,-lm 表示链接系统的数学库 libm.a 。
说明:
在编译一个包含许多源文件的工程时,若只用一条gcc命令来完成编译是非常浪费时间的。假如项目中有100个源文件需要编译,并且每个源文件中都包含一万行代码,如果像上面那样仅用一条gcc命令来完成编译工作,那么gcc需要将每个源文件都重新编译一遍,然后再全部链接起来。很显然,这样浪费的时间相当多,尤其是当用户只是修改了其中某个文件的时候,完全没有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会发生改变的。要解决这个问题,需要借助像make这样的工具(make在其他文章会有详解)。二、警告提示功能选项
gcc包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员写出更加专业的代码。
(1)-pedantic 选项
当gcc在编译不符合ANSI/ISO C 语言标准的源代码时,将产生相应的警告信息。
(2)-Wall 选项
除了 -pedantic 之外,gcc 还有一些其他编译选项,也能够产生有用的警告信息。这些选项大多以 -W 开头。其中最有价值的当数 -Wall 了,使用它能够使 gcc 产生尽可能多的警告信息。
gcc 给出的警告信息虽然从严格意义上说不能算作错误,但却和可能成为错误来源。一个优秀的程序员应该尽量避免产生警告信息,使自己的代码始终保持简洁、优美和健壮的特性。(3)-Werror 选项
在处理警告方面,另一个常用的编译选项是 -Werror。它要求 gcc 将所有的警告当成错误进行处理,这在使用自动编译工具(如 Make 等)时非常有用。如果编译时带上 -Werror 选项,那么 gcc 会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改。只有当相应的警告信息消除时,才可能将编译过程继续朝前推进。三、库操作选项
在Linux下开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助一个或多个函数库的支持才能够完成相应的功能。
从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(.so 或 .a)的集合。虽然Linux下的大多数函数都默认将头文件放到 /usr/include/ 目录下,而库文件则放到 /usr/lib/ 目录下,但并不是所有的情况都是这样。正因如此,gcc 在编译时必须有自己的办法来查找所需要的头文件和库文件。常用的方法有:
(1) -I
可以向 gcc 的头文件搜索路径中添加新的目录。
(2) -L
如果使用了不在标准位置的库文件,那么可以通过 -L 选项向 gcc 的库文件搜索路径中添加新的目录。
(3) -l
Linux下的库文件在命名时有一个约定,就是应该以 lib 这3个字母开头,由于所有的库文件都遵循了同样的规范,因此在用 -l 选项指定链接的库文件名时可以省去 lib 这3个字母。例如,gcc 在对 -lfoo 进行处理时,会自动去链接名为 libfoo.so 的文件。
(4) -static
Linux下的库文件分为两大类,分别是:动态链接库(通常以 .so 结尾)和静态链接库(通常以 .a 结尾)。
两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。
默认情况下,gcc 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库。
如果需要的话,可以在编译时加上 -static 选项,强制使用静态链接库。
(5) -shared
生成一个共享的目标文件,它能够与其他的目标一起链接生成一个可执行的文件。四、 调试选项
对于Linux程序员来讲,gdb(GNU Debugger)通过与 gcc 的配合使用,为基于Linux的软件开发提供了一个完善的调试环境。常用的有:
(1) -g 和 -ggdb
默认情况下,gcc 在编译时不会将调试符号插入到生成的二进制代码中,因为这样会增加可执行文件的大小。如果需要在编译时生成调试符号信息,可以使用 gcc 的 -g 或 -ggdb 选项。
gcc 在产生调试符号时,同样采用了分级的思路,开发人员可以通过在 -g 选项后附加数字1、2、3指定在代码中加入调试信息的多少。默认的级别是2(-g2),此时产生的调试信息包括:扩展的符号表、行号、局部或外部变量信息。
级别3(-g3)包含级别2中的所有调试信息以及源代码中定义的宏。
级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储。
回溯追踪:指的是监视程序在运行过程中函数调用历史。
堆栈转储:则是一种以原始的十六进制格式保存程序执行环境的方法。注意:使用任何一个调试选项都会使最终生成的二进制文件的大小急剧增加,同时增加程序在执行时的开销,因此,调试选项通常仅在软件的开发和调试阶段使用。
(2) -p 和 -pg
会将剖析(Profiling)信息加入到最终生成的二进制代码中。剖析信息对于找出程序的性能瓶颈很有帮助,是协助Linux程序员开发出高性能程序的有力工具。(3) -save-temps
保存编译过程中生成的一些列中间文件。# gcc test.c -o test -save-temps
除了生成执行文件test之外,还保存了test.i 和 test.s 中间文件,供用户查询调试。
-
为什么显示gcc命令没有找到?
2021-05-09 04:01:03ai0909 于 2011-11-01 14:21:05发表:{:2_97:}itank 于 2011-02-27 15:26:44发表:你试试 gcc hello.c -o hellowusmliao 于 2010-11-25 19:46:00发表:求答案vfdff 于 2010-11-14 12:29:29发表:使用which gcc查看,如果... -
Linux 的gcc命令
2009-11-18 00:21:17关于Linux的一个命令gcc,此处给出了其的一些用法,希望可以帮到你! -
linux安装gcc命令步骤(centos安装gcc命令)
2022-01-14 21:02:35linux安装gcc命令步骤(centos安装gcc命令) >一、前言 本文介绍在CentOS7.8系统下使用YUM升级GCC版本的相关操作步骤。 CentOS7默认安装的gcc版本是4.8版本,gcc 4.8最主要的一个特性就是全面支持C++11,如果不... -
Linux(Ubuntu)虚拟机安装GCC编译器
2021-05-11 12:49:37gcc编译器在一些Linux的发行版本中是自带的,例如Ubuntu11.10中就默认安装了gcc编译器,为了确认你的版本中是否预装了gcc编译器,可以通过gcc --version指令来确认,下面为安装了gcc编译器后,指令返回的结果:gcc ... -
GCC常用命令
2014-07-15 23:12:02此文档详细的讲述了有关GCC的常用命令以及解释相关的过程。 -
[001][Linux] gcc基本命令
2022-03-14 21:48:39GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器,GNU工具链也包含了编译器、汇编器和连接器。一个C/C++文件要经过预处理(Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接... -
GCC编译命令 Gcc命令行详解
2010-07-16 19:31:56GCC编译命令 Gcc命令行详解 Gcc命令行详解 Gcc命令行详解 -
ubuntu 下搭建arm-linux-gcc 命令未找到问题
2021-05-10 08:03:17很郁闷,找了近一个下午,老是提示arm-linux-gcc找不到,但是确实是装好了,其实是权限的问题,原帖如下:https://blog.sina.com.cn/s/blog_4670451c0100e1uw.htmlubuntu没有root权限,刚开始用碰到很多麻烦,查了... -
Linux下gcc命令详解
2018-10-06 15:56:14GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada...gcc命令下各选项的... -
第一次用gcc命令时报错:gcc: 未找到命令...
2020-05-27 21:57:44命令:which gcc (显示没有相关的文件) (2)安装gcc程序 命令:yum -y install gcc automake autoconf libtool make (等待一段时间,安装完成后如下图:) 然后就可以使用gcc相关的命令了! ... -
使用GCC编译程序常用命令
2021-11-11 09:33:58gcc main.c -o main.o -c gcc main.i -o main.o -c gcc main.s -o main.o -c 4.2 objdump 命令,反汇编 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件... -
Ubuntu gcc命令总结
2019-05-04 17:42:20Ubuntu gcc命令总结 原文地址 以下是个人摘要: 默认编译:gcc test.c -o: gcc test.c -o out 确定可执行文件(.out文件)文件名为out -e / -s / -c:(这三部是相连的) gcc test.c -e -o test.i 把test.c预处理,... -
gcc常用命令
2019-06-06 10:01:04gcc常用命令 https://www.cnblogs.com/mingcaoyouxin/p/4282522.html 1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件... -
离线安装GCC与GCC-C++
2019-09-10 14:45:39离线安装GCC与GCC-C++ -
CentOS 7下安装gcc 9.3.0
2021-01-20 14:30:00目录CentOS 7下安装gcc 9.3.0安装gcc安装bzip2下载gcc-9.3.0.tar.gz解压gcc-9.3.0.tar.gz安装gcc-9.3.0查看gcc版本注意事项 CentOS 7下安装gcc 9.3.0 本文主要介绍怎么在CentOS 7环境下安装GCC 9.3.0,适用于部分... -
Linux虚拟机安装gcc(解决依赖)
2020-04-29 20:59:29其实在我们安装虚拟机时,就已经下载了gcc的RPM包,我们只需要找到,安装即可 第一步: 到我们的home主目录下 第二步: 找到我们的gcc软件包 第三步: 将我们需要的软件包复制到我们的home目录下 第四步: 安装... -
在Windows命令行工具cmd中使用gcc命令实现编译
2022-03-16 15:33:55可以通过安装MinGW实现,具体安装过程网上有,只有一点需要注意:要勾选mingw32-gcc-base-bin, mingw32-gcc-g++-bin组件来安装。 安装完成后,将安装路径(例如C:\MinGW\bin)添加到系统变量中的path变量里。然后... -
[linux]如何使用命令安装gcc/g++, gdb, vim
2017-11-24 15:37:15查看配置 首先,在命令行中输入vi查看一下...Centos中使用yum来配置gcc和g++,若要安装gcc,则在命令行中输入:yum -y install gcc,按回车键就能够进行gcc的安装,若要安装g++,则需要在命令行中输入:yum -y insta... -
linux运行gcc文件命令
2022-03-31 11:48:54先编译C文件 gcc -o [文件名不加后缀] 文件名加后缀 再运行 ./文件名不加后缀 例子 2. -
GCC编译常用命令
2018-05-05 23:45:02GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。一. 常用编译命令选项假设源程序文件名为test.c。1... -
Linux gcc编译命令
2018-11-19 19:40:57编译、链接 和运行C程序 编写一个C程序 用 touch 命令:“touch 文件名” 可以创建一个文件(比如 touch hello.c),如下图: -
GCC命令
2019-06-08 13:31:27GCC命令 @(嵌入式工具环境) 文章目录GCC命令GCC简介GCC命令的常用选项预处理编译为汇编代码汇编链接 GCC简介 GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还... -
vmware安装redhat7.0虚拟机没有找到gcc命令的经验
2020-05-16 19:27:36vmware安装redhat7.0虚拟机没有找到gcc命令的经验 1.redhat7.0安装过程出现问题,导致用的时候一直显示未找到GCC命令或者是管理者权限问题,等等。当时也是在网上搜索了很多的解决办法,想要自己安装好GCC编译器... -
Ubuntu下gcc安装及使用
2018-03-08 14:08:19 Ubuntu下gcc安装及使用 2016年06月21日 10:58:37 29486人阅读 评论(2) 收藏 举报 ... -
Linux 下的 gcc 编译常用命令
2022-03-15 16:27:06gcc:Linux下的一款编译器。 gcc工作流程: 完整编译流程: 创建一个c语言源文件: gcc -E hello.c -o hello.i(头文件展开,进行源文件中的宏替换,注释过滤) gcc -S hello.i -o hello.s(将源文件编译成汇编文件... -
linux 安装gcc和 g++
2018-08-08 10:00:00安装C/C++的编译器gcc和g++,运行了如下两条命令: 1 yum install gcc 2 yum install gcc-c++ libstdc++-devel (正确) yum install g++ 但安装g++时提示: Cannot find a package matching g++ lin...