linux 安装gcc和 g++

本文详细介绍了在RedHat和Ubuntu系统中安装gcc和g++的方法,解决了g++安装过程中常见的依赖问题,并探讨了gcc与g++在编译C/C++代码时的区别,包括预处理、编译、汇编和链接四个步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux中安装gcc和g++ (RedHat)

安装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++

linux中安装gcc和g++ (Ubuntu)

       1、gcc默认自带,不知道是系统自带原因还是装的镜像原因

       2、sudo apt-get install g++

     但是有的ubuntu系统安装不成功

得出如下错误:

正在读取软件包列表... 完成

正在分析软件包的依赖关系树

正在读取状态信息... 完成

有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是

因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件

包尚未被创建或是它们已被从新到(Incoming)目录移出。

下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:

g++ : 依赖: g++-4.8 (>= 4.8.2-5~) 但是它将不会被安装

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决办法:

 

使用aptitude包依赖管理工具来帮我们处理,具体使用方法如下:

sudo apt-get install aptitude

sudo aptitude install g++

终端中输入后会提示aptitude给出的解决方案,可以选择no,会继续提供下一个解决方案(一般前面的方案会是忽略掉依赖冲突)所以想要彻底解决的话可以跳过前面的几种方案,然后再yes解决,具体看情况



关于编译的一些问题:

1、首先编写了第一个C++程序,Hello,world!
2、用命令:GCC -o test test.cpp编译,有问题。然后分析,即分开运行GCC.

   GCC -c -o test.o test.cpp。成功执行。

   GCC -o test test.o。出现一堆链接错误。

   g++ -o test test.o。成功执行。

c++: 可以直接使用 g++ -w one.cpp two.cpp three.cpp  -fPIC -shared -o libtest.so 生成linux可用的so文件

-w 忽略所有告警

由此发现,GCC与g++还有有一些区别的。

GCC and g++分别是gnu的c & c++编译器 GCC/g++在执行编译工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp] 
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 
4.连接目标代码,生成可执行程序[链接器ld]

1 :两者都可以编译C和C++代码,但是请注意:
(1).后缀为.c的,GCC把它当作是C程序,而g++当作是c++程序;

    后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。C++的语法规则更加严谨一些。

(2).编译阶段,g++会调用GCC,对于c++代码,两者是等价的,但是因为GCC命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。

2 :对于__cplusplus宏,实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用GCC编译器,则该宏就是未定义的,否则,就是已定义。

3 :编译可以用GCC/g++,而链接可以用g++或者GCC -lstdc++。因为GCC命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用GCC,二者等价。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值