国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++

這篇具有很好參考價(jià)值的文章主要介紹了【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??博主CSDN主頁(yè):杭電碼農(nóng)-NEO??
?
?專(zhuān)欄分類(lèi):Linux從入門(mén)到開(kāi)通?
?
??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記??
?
??關(guān)注我??帶你學(xué)更多操作系統(tǒng)知識(shí)
? ????


【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

1. 前言

如果你不知道vim的各種用法和快捷鍵
請(qǐng)先閱讀上一篇文章: yum和vim詳解

現(xiàn)在,我們可以在Linux下編輯代碼了
編輯好的文件是一個(gè).c文件,vim不像
VS一樣既可以編寫(xiě)代碼也可以運(yùn)行代碼
在Linux中運(yùn)行代碼需要使用:gcc,g++

本章重點(diǎn):

本篇文章會(huì)著重講解gcc/g++的使用
以及程序翻譯的幾個(gè)過(guò)程和對(duì)應(yīng)的文件
最后講解動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別和聯(lián)系


2. gcc/g++的使用介紹

首先我們要明確一點(diǎn):
在之前的Linux學(xué)習(xí)中談到
Linux中不分文件后綴,所以文本文件可以
設(shè)置后綴為txt來(lái)提醒讀者這是一個(gè)文本文件
也可以什么都不寫(xiě)

但是Linux系統(tǒng)不分文件后綴
不代表Linux下的各種程序不分!

今天要學(xué)習(xí)的gcc和g++就是Linux下的程序
它們是要看文件后綴的!

  • gcc: C語(yǔ)言編譯器,只能編譯C語(yǔ)言
  • g++: C++編譯器,C/C++都可以編譯

gcc/g++使用方法:

  1. 生產(chǎn)的可執(zhí)行程序名字默認(rèn)為:a.out
gcc code.c
  1. 自定義可執(zhí)行程序的名字
gcc code.c -o 自定義名字
  1. 使用C99標(biāo)準(zhǔn)來(lái)編譯
gcc code.c -std=99

3. 執(zhí)行可執(zhí)行程序

執(zhí)行可執(zhí)行程序:

當(dāng)我們編譯好程序后,會(huì)在當(dāng)前目錄生成一個(gè)
可執(zhí)行程序,此文件通常是綠色的

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

此時(shí)我們只需要使用以下指令即可運(yùn)行代碼!

./a.out

注:.代表要在當(dāng)前目錄下找可執(zhí)行文件.必須加上


4. 程序翻譯的四個(gè)階段

雖然現(xiàn)在已經(jīng)掌握了如何編譯并運(yùn)行代碼
但是在C/C++代碼的翻譯過(guò)程中還有四個(gè)
階段值得我們?nèi)W(xué)習(xí):

  1. 預(yù)處理階段
  2. 編譯階段
  3. 匯編階段
  4. 鏈接階段

4.1 預(yù)處理階段

預(yù)處理階段要做的工作有:

  • 頭文件展開(kāi)
  • 去掉注釋
  • 條件編譯
  • 宏替換

那么預(yù)處理階段過(guò)后還是C語(yǔ)言嗎?
現(xiàn)在我們用Linux指令來(lái)查看一下:

使用指令: gcc -E csdn.c -o csdn.i

指令解釋:將程序停留在預(yù)處理過(guò)程后,生成.i文件

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維
現(xiàn)在我們使用vim編輯器打開(kāi).i件:

預(yù)處理階段

可以發(fā)現(xiàn),我們寫(xiě)的代碼在最下面
然而上面還有幾百行其實(shí)就是頭文件展開(kāi)
所謂頭文件展開(kāi)就是:
將頭文件的內(nèi)容拷貝到當(dāng)前文件
在頭文件中有許多空行,這是
因?yàn)樵鹊念^文件有注釋,此時(shí)注釋已經(jīng)沒(méi)了

注:其他工作大家可自行去驗(yàn)證


4.2 編譯階段

編譯階段的主要工作是:

  • 將C語(yǔ)言翻譯為匯編代碼

編譯階段過(guò)后,就不是C語(yǔ)言了!
現(xiàn)在我們用Linux指令來(lái)查看一下:

使用指令: gcc -S csdn.i -o csdn.s

指令解釋:將程序停留在編譯過(guò)程后,生成.s文件

注:可以由.c文件直接使用以上指令變成.s文件

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

使用vim編輯器打開(kāi).s文件:

B站視頻描述

可以發(fā)現(xiàn),現(xiàn)在的匯編代碼
如果沒(méi)有了解過(guò)是很難讀懂的


4.3 匯編階段

匯編階段的主要工作是:

  • 將匯編代碼變成可重定位二進(jìn)制文件

匯編階段過(guò)后,文件存放的是二進(jìn)制信息!
現(xiàn)在我們用Linux指令來(lái)查看一下:

使用指令: gcc -c csdn.s -o csdn.o

指令解釋: 將程序停留在匯編過(guò)程后,形成.o文件

注:這里也可以用.c或.i文件形成.o文件

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

此時(shí)使用vim打開(kāi)文件是亂碼
可以使用指令od查看二進(jìn)制文件:

B站視頻描述


4.4 鏈接階段

鏈接階段比較復(fù)雜,它大致的流程是這樣的:

.o文件 + 系統(tǒng)庫(kù) = 可執(zhí)行程序

在本篇文章的后半段講完動(dòng)靜態(tài)庫(kù)后再解釋!


5. 庫(kù)函數(shù)的命名和分類(lèi)(動(dòng)靜態(tài)庫(kù))

我們?cè)趯?xiě)C語(yǔ)言代碼時(shí)使用的printf函數(shù)
并沒(méi)有自己實(shí)現(xiàn),然而在stdio.h頭文件中
也只有printf函數(shù)的說(shuō)明,那么此函數(shù)的
實(shí)現(xiàn)是在哪里實(shí)現(xiàn)的呢?

引出今天的新內(nèi)容
查看一個(gè)可執(zhí)行程序依賴(lài)的第三方庫(kù)

使用指令: ldd 可執(zhí)行程序名

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

可以發(fā)現(xiàn),在路徑lib64里有一個(gè)文件叫l(wèi)ibc.so.6
這個(gè)就是剛剛的C語(yǔ)言程序所要依賴(lài)的庫(kù)

對(duì)于庫(kù)名字的解釋:

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

可見(jiàn),libc.so.6實(shí)際上就是C的標(biāo)準(zhǔn)庫(kù)!

拓展:Linux和Windows下動(dòng)靜態(tài)庫(kù)命名區(qū)別:

  • Linux下: .so 是動(dòng)態(tài)庫(kù) .a 是靜態(tài)庫(kù)

  • Windows下: .ddl 是動(dòng)態(tài)庫(kù) .lib 是靜態(tài)庫(kù)

現(xiàn)在我們就可以理解鏈接過(guò)程了
鏈接過(guò)程就是將.o文件和動(dòng)/靜態(tài)庫(kù)結(jié)合的過(guò)程


6. 動(dòng)靜態(tài)庫(kù)的區(qū)別與優(yōu)缺點(diǎn)

通俗的來(lái)講,動(dòng)態(tài)庫(kù)類(lèi)似于網(wǎng)吧的電腦
而靜態(tài)庫(kù)類(lèi)似于自己家里的電腦

它們的區(qū)別是:

  • 動(dòng)態(tài)庫(kù)是共享庫(kù),通過(guò)函數(shù)地址來(lái)關(guān)聯(lián)程序
  • 靜態(tài)庫(kù)是私有庫(kù),可以獨(dú)立運(yùn)行

動(dòng)態(tài)庫(kù): 是C/C++或其他第三方提供的所有方法的集合,被所有程序以動(dòng)態(tài)鏈接的方式關(guān)聯(lián)起來(lái)

靜態(tài)庫(kù): 是C/C++或其他第三方提供的所有方法的集合,被所有程序以拷貝的方式,將需要的代碼拷貝至自己的可執(zhí)行程序當(dāng)中!

說(shuō)白了,靜態(tài)庫(kù)是將所有代碼拷貝過(guò)來(lái)
而動(dòng)態(tài)庫(kù)是去找函數(shù)的地址調(diào)用此函數(shù)

動(dòng)靜態(tài)庫(kù)的優(yōu)缺點(diǎn):

  • 動(dòng)態(tài)庫(kù): 優(yōu)點(diǎn):形成的可執(zhí)行程序體積較小,節(jié)省資源
    缺點(diǎn):要找函數(shù)地址,會(huì)稍慢一點(diǎn),并且有強(qiáng)依賴(lài)性

  • 靜態(tài)庫(kù): 優(yōu)點(diǎn):無(wú)視庫(kù),可以獨(dú)立運(yùn)行
    缺點(diǎn): 體積太大,浪費(fèi)資源

我們?cè)诰幾g代碼時(shí),默認(rèn)使用的是動(dòng)態(tài)庫(kù)
并且Linux下絕大多數(shù)庫(kù)都是動(dòng)態(tài)庫(kù)!

如果你想使用靜態(tài)庫(kù)編譯代碼

使用指令: gcc code.c -static


7.總結(jié)以及拓展

總的來(lái)說(shuō)gcc,g++這兩個(gè)編譯器并不難
掌握它們就需要學(xué)會(huì)使用一些特殊的指令
這里列出一些gcc常用的指令
大家可以下來(lái)自己嘗試:

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

拓展: 計(jì)算機(jī)語(yǔ)言發(fā)展史和C/C++的翻譯過(guò)程

眾所周知,計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制碼是因?yàn)?br> 計(jì)算機(jī)內(nèi)的硬件元器件只認(rèn)識(shí)二進(jìn)制(正電/負(fù)電)
最開(kāi)始和計(jì)算機(jī)交流是用二進(jìn)制進(jìn)行交流
最經(jīng)典的用具就是二進(jìn)制打孔膠帶

【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++,Linux從入門(mén)到精通,linux,excel,運(yùn)維

科學(xué)家覺(jué)得用二進(jìn)制交流非常不方便!
于是發(fā)明了匯編語(yǔ)言,匯編語(yǔ)言和匯編編譯器
都是用二進(jìn)制碼寫(xiě)的,當(dāng)這一過(guò)程被完善后
就可以用匯編語(yǔ)言來(lái)重新編寫(xiě)匯編編譯器了!

有了匯編語(yǔ)言后陸陸續(xù)續(xù)又發(fā)展了許多語(yǔ)言
最經(jīng)典的莫過(guò)于C語(yǔ)言!然而C語(yǔ)言是用匯編
代碼編寫(xiě)的,C語(yǔ)言的編譯器也是用匯編代碼寫(xiě)的
當(dāng)這一過(guò)程成熟后,就可以用C語(yǔ)言程序編寫(xiě)
C語(yǔ)言的編譯器了,于是語(yǔ)言才慢慢發(fā)展起來(lái)

結(jié)論:

通過(guò)了解C語(yǔ)言的歷史我們發(fā)現(xiàn)
C語(yǔ)言的翻譯過(guò)程正是它的歷史過(guò)程!
先從C語(yǔ)言翻譯為匯編,再?gòu)膮R編翻譯為二進(jìn)制
因?yàn)榇罄锌偸嵌谜驹诰奕说募缟?有前人
編寫(xiě)了從匯編到二進(jìn)制的代碼,那么我們就
不用再寫(xiě)直接從C語(yǔ)言到二進(jìn)制的代碼了

一是方便了科學(xué)家本身,二是讓我們勿忘歷史!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-724952.html


?? 下期預(yù)告:Linux開(kāi)發(fā)工具(下) ??

到了這里,關(guān)于【linux基礎(chǔ)(六)】Linux中的開(kāi)發(fā)工具(中)--gcc/g++的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 『Linux升級(jí)路』基礎(chǔ)開(kāi)發(fā)工具——gcc/g++篇

    『Linux升級(jí)路』基礎(chǔ)開(kāi)發(fā)工具——gcc/g++篇

    ?? 博客主頁(yè): 小王又困了 ?? 系列專(zhuān)欄: Linux ?? 人之為學(xué),不日近則日退? ?? 感謝大家點(diǎn)贊??收藏?評(píng)論?? 目錄 一、快速認(rèn)識(shí)gcc/g++ ?二、預(yù)處理 ??1.1頭文件展開(kāi)? ??1.2條件編譯 二、編譯 三、匯編 四、鏈接 ??4.1庫(kù)的概念 ??4.2庫(kù)的特點(diǎn) ??4.3庫(kù)的分類(lèi) ??4.4動(dòng)態(tài)

    2024年02月05日
    瀏覽(23)
  • 【Linux環(huán)境基礎(chǔ)開(kāi)發(fā)工具】編譯器-gcc/g++

    【Linux環(huán)境基礎(chǔ)開(kāi)發(fā)工具】編譯器-gcc/g++

    上一篇博客, 我們學(xué)習(xí)了vim編輯工具,學(xué)會(huì)了怎么寫(xiě)代碼, 這篇文章,我將分享代碼該怎么編譯的問(wèn)題。 目錄 寫(xiě)在前面: 1. gcc和g++介紹 2. gcc是如何編譯程序的 1. 預(yù)處理 2. 編譯 3. 匯編 4. 鏈接 3. gcc的選項(xiàng)介紹 4. 我們使用的函數(shù)是哪來(lái)的 5. 我們的.o文件和庫(kù)是如何鏈接的?

    2024年02月10日
    瀏覽(59)
  • 【Linux從入門(mén)到精通|開(kāi)發(fā)工具】---gcc/g++的基本使用

    【Linux從入門(mén)到精通|開(kāi)發(fā)工具】---gcc/g++的基本使用

    個(gè)人主頁(yè):平行線(xiàn)也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線(xiàn)也會(huì)相交 原創(chuàng) 收錄于專(zhuān)欄【Linux專(zhuān)欄】?? 本專(zhuān)欄旨在分享學(xué)習(xí)Linux的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)討論?? 接下來(lái)我們來(lái)學(xué)習(xí) Linux編輯器---gcc/g++ 的使用。 在學(xué)習(xí) gcc/g++ 之前,我們先來(lái)簡(jiǎn)單

    2024年02月12日
    瀏覽(25)
  • Linux:基礎(chǔ)開(kāi)發(fā)工具之yum,vim,gcc的使用

    Linux:基礎(chǔ)開(kāi)發(fā)工具之yum,vim,gcc的使用

    本篇主要總結(jié)的是Linux下開(kāi)發(fā)工具 yum vim gcc/g++ 什么是yum? 不管是在手機(jī)移動(dòng)端還是 pc 端,不管是什么操作系統(tǒng),當(dāng)用戶(hù)想要下載一些內(nèi)容或者工具的時(shí)候,都需要到一個(gè)特定的位置進(jìn)行下載,例如在手機(jī)上,要下載一些應(yīng)用的時(shí)候就可以去對(duì)應(yīng)的應(yīng)用商店下載 而在Linux系統(tǒng)

    2024年02月08日
    瀏覽(50)
  • Linux基礎(chǔ)環(huán)境開(kāi)發(fā)工具的使用(yum,vim,gcc,g++)

    Linux基礎(chǔ)環(huán)境開(kāi)發(fā)工具的使用(yum,vim,gcc,g++)

    首先先說(shuō)明一點(diǎn): Centos系統(tǒng)適用于yum 而Ubanto適用于apt-get 在Linux中我們也要進(jìn)行工具/程序/指令的安裝,檢查和卸載, 而我們安裝軟件的方式: 1.源代碼安裝-需要進(jìn)行交叉編譯的工作 一般那些很強(qiáng)的程序員中的大佬才能拿捏 2.rpm包直接安裝,也很麻煩 3.yum直接安裝 這就需要用到y(tǒng)

    2024年02月06日
    瀏覽(52)
  • Linux中的開(kāi)發(fā)工具(yum,vim,gcc/g++,gdb,Makefile,git)

    Linux中的開(kāi)發(fā)工具(yum,vim,gcc/g++,gdb,Makefile,git)

    yum(Yellow dog Updater,Modified)是Linux下非常常用的一種 包管理器 。主要應(yīng)用在Fedora,RedHat,Centos等發(fā)行版上。 和手機(jī)上的軟件商店類(lèi)似,我們可以使用 yum 來(lái)下載各種我們想要的軟件包。使用 yum 時(shí)必須聯(lián)網(wǎng)。 yum 基于 RPM 包管理,能夠從指定的服務(wù)器自動(dòng)下載 RPM 包并且安裝

    2024年02月08日
    瀏覽(25)
  • 【Linux】Linux環(huán)境基礎(chǔ)開(kāi)發(fā)工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、進(jìn)度條 、git)

    【Linux】Linux環(huán)境基礎(chǔ)開(kāi)發(fā)工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、進(jìn)度條 、git)

    (???(??? )??,我是 Scort ?? ??博客主頁(yè):張小姐的貓~江湖背景?? 快上車(chē)??,握好方向盤(pán)跟我有一起打天下嘞! 送給自己的一句雞湯??: ??集中起來(lái)的意志可以擊穿頑石?? ??作者水平很有限,如果發(fā)現(xiàn)錯(cuò)誤,可在評(píng)論區(qū)指正,感謝?? ????歡迎持續(xù)關(guān)注!????

    2024年01月16日
    瀏覽(59)
  • 【linux基礎(chǔ)(五)】Linux中的開(kāi)發(fā)工具(上)---yum和vim

    【linux基礎(chǔ)(五)】Linux中的開(kāi)發(fā)工具(上)---yum和vim

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專(zhuān)欄分類(lèi):Linux從入門(mén)到開(kāi)通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)更多操作系統(tǒng)知識(shí) ? ???? 理解了Linux基本指令和權(quán)限之后 終于開(kāi)始了與代碼相關(guān)的工具的使用 想必各位早已聽(tīng)說(shuō)過(guò)vim的大名,這篇文章 將帶你深入淺

    2024年02月09日
    瀏覽(26)
  • Linux開(kāi)發(fā)工具:gcc和g++

    Linux開(kāi)發(fā)工具:gcc和g++

    目錄 一.?什么是gcc和g++ 二. gcc的基本使用方法 三. 庫(kù)和鏈接 3.1 動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù) 3.2?動(dòng)態(tài)鏈接和靜態(tài)鏈接 四. Debug和Release 五.?makefile和make 六.?總結(jié)? gcc:Linux下編譯C語(yǔ)言程序的編譯器 g++:Linux下編譯C++代碼的編譯器 由于C++兼容C語(yǔ)言,因此g++既可以編譯C++也可以編譯C語(yǔ)言。

    2024年02月07日
    瀏覽(20)
  • 【linux基礎(chǔ)(七)】Linux中的開(kāi)發(fā)工具(下)--make/makefile和git

    【linux基礎(chǔ)(七)】Linux中的開(kāi)發(fā)工具(下)--make/makefile和git

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專(zhuān)欄分類(lèi):Linux從入門(mén)到開(kāi)通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)更多操作系統(tǒng)知識(shí) ? ???? 如果你不知道什么是vim和gcc 請(qǐng)先閱讀這兩篇文章后再學(xué)習(xí)本節(jié): 文章一: vim和yum 文章二: gcc/g++ 本章重點(diǎn): 本篇文章會(huì)著重講

    2024年02月08日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包