gcc与g++编译器

        首先在Linux(RHEL7.0)上安装gcc:yum install gcc gcc-c++ -y   其中gcc-c++是为了能够编译c++源代码,即g++。

        gcc为Linux C/C++下重要的编译环境,是GUN项目中符合ANSIC标准的编译系统, gcc可以编译C、C++、Objective-C、Java、Fortran、Pascal等多种语言,而且gcc还是一个交叉平台编译器(跨平台)。

        gcc是一组编译工具的总称,其软件包里包含众多的工具:C编译器(cclplus等)、C++编译器(c++、g++、cclplus等)、源码预处理程序(cpp、cpp0)、库文件(libgcc.a、libgcc_eh.a、libgcc_s.so、libiberty.a、libstdc++.[a,so]、libsupc++.a)。

        具体的编译过程分为4个阶段:预处理、编译、汇编和链接。可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用gcc在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。gcc编译环境还提供了灵活而又强大的代码优化功能。

        gcc通过文件的后缀名来区别输入文件的类别: .c  C语言源代码文件    .C /.cc /.cxx/.cpp C++源代码文件    .m Objective-C源代码文件        .i 经预处理过的C源代码文件      .ii 经预处理过的C++源代码文件      .s 汇编语言源代码文件(汇编语言)       .S 经过预处理的汇编语言源代码文件(汇编语言)        .a 由目标文件构成的档案库文件(机器语言,二进制文件)        .h 头文件       .o/.obj 目标文件(机器语言,二进制文件)        其实任意一种高级语言在计算机上的执行过程如下: 首先进行预处理(处理各种宏定义等);接下来,高级语言(如C++、python等)在高级语言机器(虚拟机器)上被编译程序翻译为汇编语言程序;然后,汇编语言程序在汇编语言机器(虚拟机器)上被汇编程序翻译为机器语言程序(目标代码); 接着,机器语言程序在操作系统机器上解释操作系统;然后,机器语言程序在机器语言机器上被解释为一个个微程序;最后,这些微程序的每一条微指令在微指令系统上直接执行。综上,大概经历以下过程:预处理、编译、汇编、链接,最终成为一个可执行的二进制文件。

        /usr/lib:存放了一些头文件与库文件。    /usr/include:这个目录及其子目录下包含程序所需要的头文件。 一般库文件放在/lib   /usr/lib和/usr/local/lib中,而头文件放在/usr/include中。       /usr/bin/g++和/usr/bin/gcc:编译程序,即实际在命令行中所执行的程序

        c源程序(以.c为扩展名的文本文件),预处理(include包含、宏定义等),编译成汇编语言,汇编器将汇编语言进行汇编形成目标文件(目标语言,以.o或.obj为扩展名的文件),目标文件在与c语言的函数库进行链接形成最终的可执行文件。

        对于某些集成开发环境,如VC和VS等,它们把预处理器(预处理程序)、编译器(编译程序)、汇编器(汇编程序,gcc、g++等)、链接器(链接程序)、某些语言头文件、某些语言库文件(标准输入、标准输出等,如printf函数和scanf函数)和系统调用接口、socket都集中在了一个软件中,形成一个语言开发项目的平台,即集成开发环境。

        软件开发的周期:分析问题、源程序的编辑、预处理、编译、链接、调试、运行的顺序。编译和链接过程中出现问题,则返回到编辑步骤重新对源程序进行检查,修改代码。调试过程中出现了问题,则说明对问题本身的分析就出现了问题(如需求等),算法错误,需要重新对问题进行分析,修正算法。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode | 49】230. 二叉搜索树中第K小的元素

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 输入: root [3,1,4,null,2], k 1 3 / \ 1 4 \ 2 输出: 1 示例 2: 输入…

gcc编译器的整个工作过程

gcc hello.c ./a.out 或者 gcc hello.c -o hello ./hello ./表示执行当前目录下的可执行程序或脚本程序。 首先gcc需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的内容;接着gcc会调用…

宏定义对调试代码的作用

以如下代码为例&#xff1a; //head.h #ifndef __HEAD_H__ #define __HEAD_H__#define NUM1 10 #define NUM2 20 #endif//sum.c #include <stdio.h> //直接在标准库中查找 #include "head.h" //先在工作目录中查找&#xff…

【第15章】多重继承

1. 虚基类介绍 多继承时很容易产生命名冲突&#xff0c;即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字&#xff0c;命名冲突依然有可能发生&#xff0c;比如非常经典的菱形继承层次。如下图所示&#xff1a; 类A派生出类B和类C&#xff0c;类D继承自类B和…

gcc编译器与g++编译器的区别

gcc与g编译器的程序文件分别为&#xff1a;/usr/bin/g和/usr/bin/gcc。 gcc 和 GCC 是两个不同的东西&#xff0c;GCC:GNU Compiler Collection(GUN 编译器集合)&#xff0c;它可以编译C、C、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler&#xff0…

1. 排序算法

一、概述 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序列中&#xff0c;r[i]仍…

1036. 跟奥巴马一起编程(15)

美国总统奥巴马不仅呼吁所有人都学习编程&#xff0c;甚至以身作则编写代码&#xff0c;成为美国历史上首位编写计算机代码的总统。2014年底&#xff0c;为庆祝“计算机科学教育周”正式启动&#xff0c;奥巴马编写了很简单的计算机代码&#xff1a;在屏幕上画一个正方形。现在…

库文件与头文件

首先说明库文件与头文件在gcc中的具体使用方法&#xff0c;然后说明两者的区别与联系。 库文件即库函数&#xff0c;如printf和scanf函数。以libgtdf.so库文件为例&#xff08;库文件在命名时都以lib开头&#xff0c;因此使用-l选项去链接指定的库文件时可以省略lib三个字母&am…

gcc的常用参数

-c 编译成目标文件.o&#xff08;只编译不链接&#xff09; gcc -c hello.s -o hello.o -o 指出输出文件名&#xff0c;输出文件名跟在-o后面。如果不使用这一选项&#xff0c;则缺省的输出文件名为a.out。gcc hello.c -o hello.exe&#xff08;在Linux中该项后缀名无要求&a…

1027. 打印沙漏(20)

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减…

【C++ Priemr | 15】构造函数与拷贝控制

继承的构造函数 1. 简介&#xff1a; 子类为完成基类初始化&#xff0c;在C11之前&#xff0c;需要在初始化列表调用基类的构造函数&#xff0c;从而完成构造函数的传递。如果基类拥有多个构造函数&#xff0c;那么子类也需要实现多个与基类构造函数对应的构造函数。 class …

C命令行参数

C命令行参数的作用是在执行程序时&#xff0c;可以将命令行的参数传值给C程序内部&#xff0c;这样就可以从外部控制程序&#xff0c;而不是在代码内对这些值进行硬编码。命令行参数是使用main函数来处理的&#xff0c;argc是指参数的个数&#xff0c;为int类型&#xff1b;arg…

剖析数组名、函数名(不是指针常量,更不是指针)

对于一个数组&#xff0c;如 int a[4]; 如果只是给出数组名a&#xff0c;编译器不知道该取该数组的第几个元素&#xff0c;因此编译器不会自动取值&#xff0c;而是返回该数组的首地址&#xff08;第一个元素的地址&#xff09;。其实&#xff0c;数组名a就是数组本身&#xf…

【C++ Priemr | 15】面向对象程序设计

类型准换与继承 为了支持c的多态性&#xff0c;才用了动态绑定和静态绑定。 需要理解四个名词&#xff1a; 对象的静态类型&#xff1a;对象在声明时采用的类型&#xff0c;是在编译期确定的。对象的动态类型&#xff1a;目前所指对象的类型&#xff0c;是在运行期决定的。对…

linux里source、. 、sh、bash、./有什么区别

转载&#xff1a;https://www.cnblogs.com/pcat/p/5467188.html 1.source a.sh source可以简写为“.”&#xff0c;即. a.sh 注意中间有空格&#xff0c;在当前shell内去读取、执行a.sh&#xff0c;而a.sh不需要有"执行权限"。 2.sh a.sh 和 bash a.sh 都是打开…

【C++ Priemr | 15】虚函数表剖析(三)

一、虚拟菱形继承 #include <iostream> using namespace std;class B { public:int _b; };class C1 :virtual public B { public:int _c1; };class C2 :virtual public B { public:int _c2; };class D :public C1, public C2 { public:int _d; };int main() {cout <&…

gcc的警告提示信息

gcc包含完整的出错检查和警告提示功能。采用-pedantic选项&#xff0c;对于不符合ANSI/ISO标准的源代码会产生相应的警告信息。如&#xff1a;gcc -pedantic hello.c -o hello (main函数返回类型为int&#xff0c;且函数体内要有return 语句&#xff0c;一般为 return 0;) -pe…

1037. 在霍格沃茨找零钱(20)

如果你是哈利波特迷&#xff0c;你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的&#xff1a;“十七个银西可(Sickle)兑一个加隆(Galleon)&#xff0c;二十九个纳特(Knut)兑一个西可&#xff0c;很容易。”现在&#xff0c;给定哈利应付的价钱P和他实付的钱A&…

【Leetcode | 6】136. 只出现一次的数字

给定一个非空整数数组&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 说明&#xff1a; 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗&#xff1f; 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入…

gcc的优化功能

代码优化的目的是改善程序的执行性能。gcc提供的代码优化功能非常强大&#xff0c;它通过参数-On来控制优化代码的生成&#xff0c;其中n为优化级别的整数&#xff0c;比较典型的范围是从0变化到2或3&#xff08;与版本有关&#xff09;。 编译时通过使用选项-O可以告诉gcc同时…