Ubuntu下gcc安装及使用

Ubuntu下gcc安装及使用在Ubuntu下安装GCC和其他一些Linux系统有点不一样。一、安装方法一:sudoapt-getbuild-depgccsudoapt-getbuild-depgcc方法二:sudoapt-getinstallbuild-essentialsudoapt-getinstallbuild-essential安装…

大家好,又见面了,我是你们的朋友全栈君。

在Ubuntu下安装GCC和其他一些Linux系统有点不一样。

 

一、安装

方法一:

  1. sudo apt-get  build-dep  gcc  
sudo apt-get  build-dep  gcc

方法二:

  1. sudo apt-get  install  build-essential  
sudo apt-get  install  build-essential

安装完了可以执行如下的命令来查看版本,

  1. gcc –version  
gcc --version

输出如下:

  1. gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)  
  2. Copyright(C)2007FreeSoftwareFoundation,Inc.  
 
  1. gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)

  2. Copyright(C)2007FreeSoftwareFoundation,Inc.

 

 

二、编译

 

编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。

gcc命令提供了非常多的命令选项。
一. 常用编译命令选项
假设源程序文件名为test.c。

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。

4. 选项 -S
用法:#gcc -S test.i 
作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。

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

7. 选项 -O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

 

一、什么是Gcc

Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。

Gcc编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。

二、gcc所遵循的部分约定规则

前面提到便宜的后缀问题,而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。

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

.a为后缀的文件,是由目标文件构成的档案库文件;
.C或.cc或.cxx为后缀的文件,是C++源代码文件;

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

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

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

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

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

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

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

三、Gcc的执行过程

虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。

●命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

●接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

●当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

四、Gcc的基本用法和选项

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。Gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数

Gcc最基本的用法是∶gcc[options] [filenames] ,其中options就是编译器所需要的参数,filenames给出相关的文件名称。

五、Gcc的参数选项

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。

-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。六、Gcc的安装方法运行环境:VMware? Workstation 7.1.2 build-301548
Linux版本:Red Hat Enterprise Linux 5.5
kernel版本:Linux kernel 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:43 EDT 2010 i686 i686 i386 GNU/Linux
注意:因为wordpress转义的问题:可能会导致下面的–翻译成—,大家在试验的时候不要复制上面的代码
自己手动敲写,比如prefix,with-gmp,with-mpfr,with-mpc前都是两个 – 

1.下载gcc-4.6.1安装包
gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/
gcc-4.6.1浏览地址:http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/
gcc-4.6.1下载地址:http://ftp.gnu.org/gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2
2.将gcc-4.6.1.tar.bz2放到/opt文件夹下解压
[root@rekfan.com ~]# cd /opt
[root@rekfan.com opt]# tar xjvf gcc-4.6.1.tar.bz2
3.创建安装目录
[root@rekfan.com opt]# mkdir /usr/local/gcc-4.6.1/
4.进入安装目录
[root@rekfan.com opt]# cd /usr/local/gcc-4.6.1/
5.配置安装文件
[root@rekfan.com gcc-4.6.1]# /opt/gcc-4.6.1/configure –prefix=/usr/local/gcc-4.6.1
(执行源目录 /opt/gcc-4.6.1/中的configure命令,配置将gcc安装到目标目录/usr/local/gcc-4.6.1/下,这里–prefix选项代表要将该库安装在哪里,我是装在/usr/local/gcc-4.6.1目录下,后面的安装都会用到这个选项)

如果执行这步的时候出现了如下错误:
———————————————————————————-
[root@rekfan.com gcc-4.6.1]# /opt/gcc-4.6.1/configure –prefix=/usr/local/gcc-4.6.1/
checking build system type… i686-pc-linux-gnu
checking host system type… i686-pc-linux-gnu
checking target system type… i686-pc-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… no
checking for cc… no
checking for cl.exe… no
configure: error: in `/usr/local/gcc-4.6.1′:
configure: error: no acceptable C compiler found in $PATH

See `config.log’ for more details.
———————————————————————————-
上面错误说明$PATH里没有找到C的编译器
如果系统有gcc编译器,那就设置下环境变量
比如:
export PATH=$PATH:/usr/local/bin
如果没有找到那么先安装gcc低版本的rpm包
插入linux软件盘(一般在第一张或第二张),挂载光盘,按下面顺序依次安装:

[root@rekfan.com opt]# rpm -ivh cpp-4.1.2-48.el5.i386.rpm
[root@rekfan.com opt]# rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm
[root@rekfan.com opt]# rpm -ivh glibc-headers-2.5-49.i386.rpm
[root@rekfan.com opt]# rpm -ivh glibc-devel-2.5-49.i386.rpm
[root@rekfan.com opt]# rpm -ivh libgomp-4.4.0-6.el5.i386.rpm
[root@rekfan.com opt]# rpm -ivh gcc-4.1.2-48.el5.i386.rpm

重复步骤5,又有新错误了,下面是部分错误代码 !如果没有错误,直接跳到步骤7 !
———————————————————————————-
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.
———————————————————————————-

错误说明要安装gcc需要GMP、MPFR、MPC这三个库,可从ftp://gcc.gnu.org/pub/gcc/infrastructure/下载相应的压缩包。由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。这里三个库我用的版本分别是gmp4.3.2,mpfr2.4.2和mpc0.8.1,都放在 /opt文件夹下。
①.安装gmp4.3.2
[root@rekfan.com opt]# tar jxvf gmp-4.3.2.tar.bz2
[root@rekfan.com opt]# mkdir /usr/local/gmp-4.3.2
[root@rekfan.com opt]# cd /usr/local/gmp-4.3.2
[root@rekfan.com gmp-4.3.2]# /opt/gmp-4.3.2/configure –prefix=/usr/local/gmp-4.3.2
[root@rekfan.com gmp-4.3.2]# make (编译)
[root@rekfan.com gmp-4.3.2]# make install (执行安装)
②安装mpfr2.4.2
[root@rekfan.com opt]# tar jxvf mpfr2.4.2.tar.bz2
[root@rekfan.com opt]# mkdir /usr/local/mpfr-2.4.2
[root@rekfan.com opt]# cd /usr/local/mpfr-2.4.2
[root@rekfan.com mpfr-2.4.2]# /opt/mpfr-2.4.2/configure –prefix=/usr/local/mpfr-2.4.2 –with-gmp=/usr/local/gmp-4.3.2
(注意配置的时候要把依赖关系选项加进去)
[root@rekfan.com mpfr-2.4.2]# make
[root@rekfan.com mpfr-2.4.2]# make install
③安装mpc0.8.1
[root@rekfan.com opt]# tar jxvf gmpc0.8.1.tar.bz2
[root@rekfan.com opt]# mkdir /usr/local/mpc-0.8.1
[root@rekfan.com opt]# cd /usr/local/mpc-0.8.1
[root@rekfan.com mpc-0.8.1]# /opt/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
[root@rekfan.com mpc-0.8.1]# make
[root@rekfan.com mpc-0.8.1]# make install
④再次安装GCC 配置安装选项
[root@rekfan.com mpc-0.8.1]# cd /usr/local/gcc-4.6.1
[root@rekfan.com gcc-4.6.1]# /opt/gcc-4.6.1/configure –prefix=/usr/local/gcc-4.6.1 -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

6.编译安装文件
[root@rekfan.com gcc-4.6.1]# make
大概需要1个小时左右,喝杯coffee,慢慢等待吧!
一个小时后···
第二个错误出现了:

打开/usr/local/gcc-4.6.1/i686-pc-linux-gnu/libgcc/config.log
ctrl+f查找error 发现如下错误
/———————————————————————————-
/usr/local/gcc-4.6.1/./gcc/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory
configure:3058: $? = 1
———————————————————————————-/
在网上找到了解决方法,需要添加环境变量LD_LIBRARY_PATH以指出前面三个库的位置,键入以下命令:
[root@rekfan.com gcc-4.6.1]# 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
再次执行步骤6→
大概三小时后···
终于编译成功了,效果图入下:

Ubuntu下gcc安装及使用

7.执行安装gcc
[root@rekfan.com gcc-4.6.1]# make install
[root@rekfan.com gcc-4.6.1]# 
如果不出意外,那么到现在应该安装成功了,不过还是不能使用新版本的gcc,因为新版本的gcc还没有加入命令搜索路径中!
8.建立软链接
[root@rekfan.com /]# sudo ln -s /usr/local/gcc-4.6.1/bin/gcc gcc461
[root@rekfan.com /]# sudo ln -s /usr/local/gcc-4.6.1/bin/g++ g++461
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-4.6.1/lib

 

export LD_LIBRARY_PATH。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163791.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flash做动画教程(基础篇)

    flash做动画教程(基础篇)第一步、软件的下载与安装FlashMX2004第二步、新建一个flash文档也就是场景一你可以右击空白的文档,作如下操作:一、改变文档的背景颜色二、根据自己制作gif动态图片的大小,来选择文档的宽高二、新建元件或者是导入外部图片有的图片是不需要自己加工的素材就从外部导入导入外部图片的步骤:文件-导入-导入到库-选择图片的位置…

    2022年4月28日
    60
  • 【尚硅谷】JavaScript基础&实战丨JS入门到精通_01-06

    【尚硅谷】JavaScript基础&实战丨JS入门到精通_01-061.JavaScript–ECMAScript–DOM–BOM2.JS基础JS代码需要编写到<scripttype=”text/javascript”> console.log(“HelloWorld”);</script>

    2025年8月8日
    3
  • Idea激活码永久有效Idea2020.3.4激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2020.3.4激活码教程-持续更新,一步到位Idea激活码永久有效2020.3.4激活码教程-Windows版永久激活-持续更新,Idea激活码2020.3.4成功激活

    2022年6月17日
    428
  • pycharm2021.2.5永久激活 3月最新注册码

    pycharm2021.2.5永久激活 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    164
  • 关于express使用formidable上传图片

    关于express使用formidable上传图片express 中使用 formidable 上传图片前端页面 js 逻辑代码 nodejs 处理逻辑前端页面 使用 bootsrap 布局静态页面 formclass form horizontalfo add divclass form group labelclass col xs 2control label 分类名称 amp labelclass col xs 2control label divclass form group formclass form horizontalfo add

    2025年10月25日
    3
  • 写给大忙人看的 – Java中图片压缩上传至MinIO服务器(4)[通俗易懂]

    写给大忙人看的 – Java中图片压缩上传至MinIO服务器(4)[通俗易懂]之前文章已经介绍了MinIO的环境搭建,已经对文件的上传下载方法,本篇文章一起与大家来学习图片压缩上传的方法1、背景最近客户总抱怨APP中图片显示较慢,升级服务器带宽又没有多的预算,查看原因,是因为现在大家都是用的智能手机拍照,拍出来的照片小则2-3M,大则十几M,所以导致图片显示较慢。思考再三,决定将图片进行压缩再上传图片服务器来解决图片显示慢的问题

    2022年6月18日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号