gcc g++区别与联系
来源:互联网 发布:电信光猫有几个端口 编辑:程序博客网 时间:2024/04/30 01:04
编译阶段是相同的,链接阶段g++默认链接c++库,gcc没有。
所以一般情况下用gcc编译c文件,用g++编译cpp文件。
但是也可以用gcc编译cpp文件,但后面需要加一个选项-lstdc++,作用是链接c++库
还可以用g++编译c文件一般而言,在Linux下编译程序分为以下4个阶段:
所以一般情况下用gcc编译c文件,用g++编译cpp文件。
但是也可以用gcc编译cpp文件,但后面需要加一个选项-lstdc++,作用是链接c++库
还可以用g++编译c文件
一般而言,在Linux下编译程序分为以下4个阶段:
- 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件
- 编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件
- 汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件
- 连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件
在Linux下执行gcc与g++编译C++文件的差别:- 后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序
- gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成)
下面进行一次简单的测试:测试环境:CentOS 6.4测试命令:- gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件
- gcc -S 执行到步骤2,生成文件.s
- gcc -c 执行到步骤3,生成文件.o
- g++ 分别编译于连接 .cc文件与.o文件
测试代码:- #include <iostream>
- using namespace std;
- int main()
- {
- cout<<"This is a C++ program."<<endl;
- }
测试结果:- gcc -E 1.cc >> 1.i
- vi 1.i
- gcc -S 1.cc
- vi 1.s
- gcc -c 1.cc
接下来测试g++ 1.o 与直接g++ 1.cc的结果:- g++ 1.o -o from_o
运行结果:
- g++ 1.cc -o from_cc
运行结果:
若直接用gcc编译链接c++文件会出错,因无法链接。- gcc 1.cc
- 后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序
- gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成)
下面进行一次简单的测试:
- gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件
- gcc -S 执行到步骤2,生成文件.s
- gcc -c 执行到步骤3,生成文件.o
- g++ 分别编译于连接 .cc文件与.o文件
测试代码:
- #include <iostream>
- using namespace std;
- int main()
- {
- cout<<"This is a C++ program."<<endl;
- }
- gcc -E 1.cc >> 1.i
- vi 1.i
- gcc -S 1.cc
- vi 1.s
- gcc -c 1.cc
- g++ 1.o -o from_o
运行结果:
- g++ 1.cc -o from_cc
运行结果:
- gcc 1.cc
阅读全文
0 0
- gcc g++区别与联系
- GCC 与 G++ 区别与联系
- gcc与g++的区别与联系
- gcc与g++区别与联系
- gcc与g++的区别与联系
- gcc与g++的区别与联系
- gcc与g++区别和联系
- Linux下GCC与G++的区别和联系
- gcc与g++区别
- gcc与g++区别
- gcc与g++区别
- g++和gcc的区别和联系
- gcc和g++的区别和联系
- [2008-07-20 16:17]gcc和g++的区别与联系
- gcc与g++的区别
- gcc与g++的区别
- gcc与g++的区别
- gcc与g++的区别
- 山东物联网蓝盾杯网络空间攻防赛赛后总结
- MySQL知识点整理(学习资料)
- 基于二叉树的表达式计算-C语言
- 剑指Offer--12.数组的整数次方
- 深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) -- 设计模式之工厂模式
- gcc g++区别与联系
- 机房重构--注册
- C++ set/multiset
- Android设置数据库的路径
- android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面
- Java-Map用法简介
- ISE新建项目报错解决方法
- 【分布式1】 分布式架构
- linux内存管理之内存管理区