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.pswp.cn/news/385464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385464.shtml
英文地址,請注明出處:http://en.pswp.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同時…