【ing】在Linux虚拟机上安装gcc/g++

1 什么是gcc

gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。

1.1 gcc编译程序的过程

gcc编译程序主要经过四个过程:

  • 预处理(Pre-Processing)
    预处理实际上是将头文件、宏进行展开。编译阶段,gcc调用不同语言的编译器,例如c语言调用编译器ccl。
  • 编译 (Compiling)
    gcc实际上是个工具链,在编译程序的过程中调用不同的工具。
  • 汇编 (Assembling)
    汇编阶段,gcc调用汇编器进行汇编。
  • 链接 (Linking)
    链接过程会将程序所需要的目标文件进行链接成可执行文件。
    在这里插入图片描述

2 下载

1.官网-GCC, the GNU Compiler Collection
GNU编译器集合包括C、c++、Objective-C、Fortran、Ada、Go和D的前端,以及这些语言的库(libstdc++,…)。GCC最初是作为GNU操作系统的编译器编写的。GNU系统是为100%的自由软件而开发的,在某种意义上说它是自由的,因为它尊重用户的自由。
在这里插入图片描述
上述官网好像找不到以前版本的Gcc了。

2.gcc下载
以下为4.1.2版本gcc,可以看到,针对不同语言(如C、c++、Objective-C、Fortran、Ada、Go)有相应的安装包。
请添加图片描述

3 安装

相⽐于windows系统,Linux安装程序就⽐较复杂了,很多需要root⽤户才能安装。常见的有以下⼏种安装⽅法:

  • 源码安装
  • rpm包安装
  • yum安装 (RedHat、CentOS)
  • apt-get安装 (debian,ubuntu)

3.1 源码安装

以安装gcc为例,上传gcc-X.X.X.tar.gz到Linux服务器任意⽬录,解压⽬录执⾏shell命令。

./configuration
make install
  • 优点:安装⽬录,软件版本等可以随⼼所欲的配置。同⼀个安装包可以在任意版本的Linux进⾏安装。
  • 缺点:安装的门槛较⾼,配置复杂,不同软件配置项⽬不同。安装容易失败。安装成功有时也会对原系统有破坏。

可供下载的文件一般有两种形式:gcc-X.X.X.tar.gz和gcc-X.X.X.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。
题外话】:Linux下的tar.gz和tar.bz2包有什么区别?
tar是打包软件,不压缩。
.gz是用tar打包的同时用gzip压缩,比如tar zcvf test.tgz /var
.bz2是用tar打包的同时用bunzip2压缩:tar jcvf test.tbz2 /var
bz2的压缩比要比gzip的压缩比高出一倍以上。

3.1.1 安装【gcc-4.0.4】

1.下载【gcc-4.0.4.tar.gz】

2.解压缩
运行下列命令进行解压

tar zxvf gcc-3.3.tar.gz

解压完成后,Downloads目录中多了【gcc-4.0.4】文件。
在这里插入图片描述
3. 建立目标目录
目标目录(用{objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录{srcdir}中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是{srcdir}的子目录。
下面在【Downloads】文件夹中新建【gcc-4.0.4-obj】文件夹,代码如下:

mkdir gcc-4.0.4-obj
cd gcc-4.0.4-obj

以下的操作主要是在目标目录 {objdir} 下进行。(否则会出错)
在这里插入图片描述
4.配置
配置的目的是决定将GCC编译器安装到什么地方({destdir}),支持什么语言以及指定其它一些选项等。其中,{destdir}不能与{objdir}或{srcdir}目录相同。
配置是通过执行{srcdir}下的configure来完成的。
源目录|目标目录|安装目录的总结说明如下:

CatalogNoteName
源目录安装包位置{srcdir}
目标目录存放编译结果的地方{objdir}
安装目录安装位置{destdir}
其命令格式为(记得用你的真实路径替换{destdir}):
{srcdir}/configure --prefix={destdir} [其它选项]

实际操作如下:

~/Downloads/gcc-4.0.4/configure --prefix=~/Downloads/gcc-4.0.4-obj --enable-threads=posix --disable-checking --enable--long-long --host=guest-dqehna --enable-language=c,c++

尝试1:在运行以下命令时:

../gcc-4.0.4/configure --prefix=~/Downloads/gcc-4.0.4-obj

在这里插入图片描述
至此输入make运行,报错,信息如下:expected an absolute directory name(需要绝对目录名
在这里插入图片描述
更改代码如下:

../gcc-4.0.4/configure --prefix=/tmp/guest-dqehna/Downloads/gcc-4.0.4-obj --enable-threads=posix --disable-checking --enable--long-long --enable-language=c,c++

在这里插入图片描述
输入make,编译开始运行。但好像还是报错了,阿西吧!!!???
请添加图片描述
5.编译

make

6.安装

make install

3.1.2 安装【gcc-3.3】

1.下载【gcc-3.3.tar.gz】
在这里插入图片描述
2.解压缩
运行下列命令进行解压

tar zxvf gcc-3.3.tar.gz

在这里插入图片描述
but,解压好像出现了问题!阿西吧!是没有完全解压好么???为啥解压都会出问题?
在这里插入图片描述

3.2 rpm包安装

常用命令参数:

  • 查看 rpm -qa
  • 安装 rpm -ivh 包名
  • 卸载 rpm -e 包名

下载rpm
RPM resource zip
RPM Search
在这里插入图片描述
出现搜索结果:
在这里插入图片描述点击第⼀个结果进⼊详情界⾯,可以看到rpm包的具体信息,包括依赖以及包⾥内容
在这里插入图片描述

  • 优点:安装时⽆需配置,可以选择版本。
  • 缺点:安装包的依赖关系需要⼈⼯维护,安装A发现依赖B,安装B发现依赖C…很考验耐⼼。

3.2.2 rpm包命名规则

gcc-c+±4.1.2-48.el5.i386.rpm是按照下⾯的格式命名的
name-version -arch(.src).rpm

  • name: 软件包名称
  • version: 带有主、次和修订的软件包版本
  • arch: 发⾏商版本,fc、el、mga、tr……硬件平台,硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha
  • src: 源代码包

3.3 yum(RedHat、CentOS)

基于RPM包管理,能够从指定的服务器⾃动下载RPM包并且安装,可以⾃动处理依赖性关系,并且⼀次安装所有依赖的软件。

yum install gdb
  • 优点是⾃动管理依赖关系。
  • 缺点是需要连接公共⽹络,安装的是指定服务器上的最新版本。

3.4 apt-get(debian,ubuntu)

apt-get是⼀条Linux命令,适⽤于deb包管理式的操作系统,主要⽤于⾃动从互联⽹的软件仓库中搜索、安装、升级、卸载软件或操作系统。

apt-get install gdb

执行上述命令后报错,
在这里插入图片描述
错误原因如下:
在这里插入图片描述
查找结果方案如下:

但依然报错
在这里插入图片描述

4 Test

4.1 C语言

#include 
int main(void) { 
printf("ad"); 
return 1; 
} 

gcc -o aa aa.c 

4.2 C++

#include 
using namespace std; 
int main(void) { 
 cout << "Ok!" << endl; 
 return 1; 
} 

g++ -o a a.cpp 

5 其它

查看gcc版本

gcc --version

5.1 使用外部库

在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明。库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的。它们通常由一组互相关联的可重用原则编写的,它们通常由一组互相关联的用来完成某项常见工作的函数构成。使用库的优点在于:

  • 模块化的开发
  • 可重用性
  • 可维护性

库又可以分为静态库与动态库:

  • 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。静态库比较占用磁盘空间,而且程序不可以共享静态库。运行时也是比较占内存的,因为每个程序都包含了一份静态库。
  • 动态库(.so或.sa):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码,这样就减少了程序的体积。

一般头文件或库文件的位置在:

  • /usr/include及其子目录底下的include文件夹
  • /usr/local/include及其子目录底下的include文件夹
  • /usr/lib
  • /usr/local/lib
  • /lib

参考

1.Linux虚拟机安装过程及安装GCC
2.Linux系统安装gcc/g++详细过程
3.Linux编译工具:gcc入门
4.Linux安装gcc的四种方法
5.在Ubuntu中遇到Unable to lock the administration directory (/var/lib/dpkg/),are you root? 问题解决办法
6.Ubuntu下如何将普通用户提升到root权限

### 如何在Linux虚拟机安装配置GCC编译器 #### 安装前准备 确保已正确安装Linux虚拟机环境,例如通过VMware安装CentOS或Ubuntu系统[^2]。如果尚未完成虚拟机安装,请先按照相关指南完成虚拟机的基础配置。 #### 安装GCC编译器 对于大多数基于Red Hat(如CentOS)或Debian(如Ubuntu)的Linux发行版,可以通过包管理工具轻松安装GCC编译器: 1. **切换到超级用户模式** 如果当前不是以root用户登录,则需要切换至root用户或者使用`sudo`提升权限: ```bash su root ``` 或者直接使用`sudo`命令执行后续操作[^4]。 2. **更新软件源列表** 更新本地软件仓库缓存以获取最新的软件包信息: 对于CentOS: ```bash yum update ``` 对于Ubuntu: ```bash apt-get update ``` 3. **安装GCC编译器** 使用相应的包管理工具安装GCC及其依赖项: - CentOS上的安装命令为: ```bash yum -y install gcc ``` - Ubuntu上的安装命令为: ```bash apt-get install build-essential ``` `build-essential`是一个元包,在Ubuntu中包含了GCCG++以及其他开发所需的工具链[^4]。 4. **验证安装是否成功** 完成安装后,可以运行以下命令检查GCC版本号,从而确认安装是否成功: ```bash gcc --version ``` 正常情况下,该命令会返回GCC的具体版本信息以及版权说明[^2]。 #### 测试GCC编译功能 编写一个简单的C语言程序测试GCC的功能。以下是具体步骤: 1. 创建一个新的C源文件名为`hello.c`,内容如下: ```c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ``` 2. 将其保存并通过Vim或其他文本编辑器关闭。 3. 执行编译命令生成可执行文件: ```bash gcc hello.c -o hello ``` 4. 运行生成的可执行文件: ```bash ./hello ``` 输出应显示“Hello, World!”[^3]。 #### 注意事项 - 若遇到任何错误消息,请仔细阅读报错提示并尝试解决。常见的问题是缺少必要的库支持或是未正确设置环境变量。 - 不同Linux发行版可能有不同的包命名约定,请查阅官方文档了解确切名称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW、forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值