ubuntu gcc 安裝 使用

【gcc安裝】html

                           「人多不足以依賴,要生存只有靠本身。」 —— 拿破崙linux

 

gcc是什麼:--------------------------服務器

 

Linux系統下的Gcc(GNU C Compiler)是GNU推出的功能強大、性能優越的多平臺編譯器,是GNU的表明做品之一。gcc是能夠在多種硬體平臺上編譯出可執行程序的超級編譯器,其執行效率與通常的編譯器相比平均效率要高20%~30%。微信

Gcc編譯器能將C、C++語言源程序編譯、鏈接成可執行文件,若是沒有給出可執行文件的名字,gcc將生成一個名爲a.out的文件。在Linux系統中,可執行文件沒有統一的後綴,系統從文件的屬性來區分可執行文件和不可執行文件。函數

 

在Ubuntu下安裝GCC(和其餘一些Linux系統有點不同):-----------------工具

方法1: sudo apt-get  build-dep  gcc 性能

方法2: sudo apt-get  install  build-essential fetch

( linux操做系統上面開發程序, 光有了gcc 是不行的,它還須要一個   build-essential軟件包,做用是提供編譯程序必須軟件包的列表信息,也就是說 編譯程序有了這個軟件包,它才知道 頭文件在哪 才知道庫函數在哪。)
 優化

安裝完了能夠執行以下的命令來查看版本:gcc --version ui

 

注意:

有些時候安裝不成功,好比

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

因此須要更新軟件包列表,這樣,apt-get才能知道每一個軟件包的最新信息,從而正確地下載最新版本的軟件。

root@maolegemi:~# apt-get update

而後,再運行sudo apt-get  install  build-essential 就能夠了!

 

 

apt-get update與upgrade的區別

apt-get是某些linux發行版使用的一個「包管理器」(還有別的發行版使用yum等,以及brew等其餘平臺上的包管理器,工做原理相似)。

包管理器的做用是從源(Source)服務器那裏下載最新的軟件包列表,而後在你須要安裝某個軟件包(apt-get install)的時候從列表裏面查詢這個軟件包的版本信息、系統要求、翻譯、依賴項(該軟件正常運行必須安裝的其它軟件)而且添加到同時安裝的列表裏面,再查詢全部安裝列表裏面的軟件包的.deb文件下載地址,最後批量下載,自動分析安裝順序而後安裝完成。

可是這個軟件包列表是不會被自動下載的,須要用戶使用apt-get update更新。這樣,apt-get才能知道每一個軟件包的最新信息,從而正確地下載最新版本的軟件。

至於apt-get upgrade,則是對已經安裝的軟件包自己進行更新的過程。因爲肯定要更新的軟件包須要對本地安裝的版本和列表的版本進行比較,因此要在update之後運行這一條。

要求在install操做以前執行update和upgrade,其實是確保本地軟件列表信息和已安裝軟件均爲最新的過程。這樣作能夠最大限度地確保新安裝的軟件包正常工做。

總而言之,update是更新軟件列表,upgrade是更新軟件。

做者:they遠去人海
連接:https://www.jianshu.com/p/42a1850bdcf6
來源:簡書
簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

 

Gcc的執行過程---------------------------------------

用gcc由C語言源代碼文件生成可執行文件的過程經歷四個相互關聯的步驟∶

預處理(也稱預編譯,Preprocessing)、編譯(Compilation)、彙編(Assembly)和鏈接(Linking)。

 

 

 

●預處理:命令gcc首先調用cpp進行預處理,在預處理過程當中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。預處理器cpp根據以字符開頭#開頭的命令,修改原始C程序。好比xx.c中的第一行爲 #include <stdio.h>,預處理器便將stdio.h的內容直接插入到程序中。

 

●編譯階段:接着調用cc1進行編譯,編譯器ccl 將文本文件xx.i 翻譯爲彙編代碼xx.s。彙編語言是很是有用的,由於它將不一樣高級語言的不一樣編譯器提供了通用的輸出語言。例如,C和Fortran 的在此步編譯產生的輸出文件都是同樣的彙編語言。

 

●彙編階段:彙編器as 將xx.s 翻譯成機器語言, 保存在xx.o 中。這是個二進制文件.

 

●連接階段:當全部的目標文件都生成以後,gcc就調用ld來完成最後的連接,全部的目標文件被安排在可執行程序中的恰當的位置,同時,該程序所調用到的庫函數也從各自所在的檔案庫中連到合適的地方,這些連接文件通常是靜態庫和動態庫。例如,hello程序調用了printf 函數,這個函數是標準C庫中的一個函數,它被保存在一個名爲printf.o 的文件中,這個文件必須以某種方式合併到咱們的hello.o的程序中。 最終,獲得hello 可執行文件,能夠被加載到內存中由系統執行。

 

gcc基本用法:----------------------------

 

假設源程序文件名爲test.c。
1) 無選項編譯連接
用法:#gcc test.c
做用:將test.c 預處理、編譯、彙編並連接造成可執行文件。這裏未指定輸出文件,默認輸出爲a.out。
2) 選項 -o
用法:#gcc test.c -o test
做用:將test.c預處理、編譯、彙編並連接造成可執行文件test。-o選項用來指定輸出文件的文件名。
3) 選項 -E
用法:#gcc -E test.c -o test.i
做用:將test.c預處理輸出test.i文件。
4) 選項 -S
用法:#gcc -S test.i 
做用:將預處理輸出文件test.i編譯成test.s文件。
5) 選項 -c
用法:#gcc -c test.s
做用:將彙編輸出文件test.s輸出爲test.o文件。彙編的做用主要是將代碼轉化成系統認識的機器指令,而後生成「.o」目標文件。
6) 無選項連接
用法:#gcc test.o -o test
做用:將編譯輸出文件test.o連接成最終可執行文件test。
7) 選項 -O
用法:#gcc -O1 test.c -o test
做用:使用編譯優化級別1編譯程序。級別爲1~3,級別越大優化效果越好,但編譯時間越長。

gcc多源文件的編譯方法

若是有多個源文件,基本上有兩種編譯方法:[假設有兩個源文件爲test.c和testfun.c]
1) 多個文件一塊兒編譯
用法:#gcc testfun.c test.c -o test

做用:將testfun.c和test.c分別編譯後連接成test可執行文件。

2) 分別編譯各個源文件,以後對編譯後輸出的目標文件連接。
用法:
#gcc -c testfun.c //將testfun.c編譯成testfun.o
#gcc -c test.c //將test.c編譯成test.o
#gcc -o testfun.o test.o -o test //將testfun.o和test.o連接成test

 

 

以上兩種方法相比較,第一中方法編譯時須要全部文件從新編譯,而第二種方法能夠只從新編譯修改的文件,未修改的文件不用從新編譯。

 

 

 

gcc所遵循的部分約定規則---------------------------------

gcc則經過後綴來區別輸入文件的類別:

.c爲後綴的文件,C語言源代碼文件;

.C或.cc或.cxx爲後綴的文件,是C++源代碼文件;

.h爲後綴的文件,是程序所包含的頭文件;

.a爲後綴的文件,是由目標文件構成的檔案庫文件;---??
 

.i爲後綴的文件,是已經預處理過的C源代碼文件;

.ii爲後綴的文件,是已經預處理過的C++源代碼文件;

 

.o爲後綴的文件,是編譯後的目標文件;

.s爲後綴的文件,是彙編語言源代碼文件;

 

.S爲後綴的文件,是通過預編譯的彙編語言源代碼文件。

.m爲後綴的文件,是Objective-C源代碼文件;

 

其餘gcc編譯選項:-----------------------------------------------------------

-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,咱們就必須加入這個選項。

-O,對程序進行優化編譯、鏈接,採用這個選項,整個源代碼會在編譯、鏈接過程當中進行優化處理,這樣產生的可執行文件的執行效率能夠提升,可是,編譯、鏈接的速度就相應地要慢一些。

-O2,比-O更好的優化編譯、鏈接,固然整個編譯、鏈接過程會更慢。
-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程當中使用的參數

 

REF:

Ubuntu點滴--apt-get update和upgrade的做用 - 黑翼天使23 - 博客園  https://www.cnblogs.com/bwangel23/p/4625245.html

Ubuntu apt update 和 apt-get update 有什麼區別? - V2EX  https://www.v2ex.com/t/561613

apt-get update和apt-get upgrade的區別 - 上官雨澤(微信:13631252376) - CSDN博客  https://blog.csdn.net/qq_19004627/article/details/79560818

apt-get update與upgrade的區別 - 簡書  https://www.jianshu.com/p/42a1850bdcf6

 

https://blog.csdn.net/anneqiqi/article/details/51725658

相關文章
相關標籤/搜索