<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Linux下編譯運(yùn)行C語(yǔ)言文件

          Linux下編譯運(yùn)行C語(yǔ)言文件

          作者: 時(shí)間:2024-05-23 來(lái)源:網(wǎng)絡(luò) 收藏

          一、準(zhǔn)備C文件

          本文引用地址:http://www.ex-cimer.com/article/202405/459100.htm

          在命令行模式下輸入:vim test.c(vi也可以,但建議用vim)

          進(jìn)入編輯模式,輸入以下代碼:

          #include<stdio.h> int main(){    printf("Hello World!n");    return 0;}


          首先點(diǎn)擊ESC鍵退出編輯模式,然后輸入:wq(注意輸入的時(shí)候有冒號(hào)哦)回到命令行。

          二、 編譯

          編譯C文件成可執(zhí)行文件

          執(zhí)行的命令:gcc test.c -o test

          輸入ls命令,能看到當(dāng)前文件夾下多了一個(gè)文件:test.out

          三 、 執(zhí)行

          執(zhí)行:./test.out

          可得輸出hello World!

          四、 編譯的四個(gè)步驟

          使用gcc把C文件編譯成可執(zhí)行文件可分為四步:預(yù)編譯、編譯、匯編、連接。

          1、預(yù)編譯(生成.i文件)

          預(yù)編譯器cpp把源文件和相關(guān)的頭文件(如實(shí)例代碼中的頭文件stdio.h)預(yù)編譯成一個(gè).i的文件。

          執(zhí)行的命令:gcc -E test.c -o test.i

          預(yù)編譯的作用:

          a、處理所有的“#include”預(yù)編譯指令

          b、處理所有的"#define"指令,將代碼中所有的"#define"刪除,并展開所有的宏定義

          c、處理所有的條件預(yù)編譯指令,如#if #elif #else #ifdef #ifnodef #endif等

          d、刪除所有的注釋

          e、添加行號(hào)和文件名標(biāo)識(shí),以便產(chǎn)生錯(cuò)誤時(shí)給出提示信息

          2、編譯(生成.s文件)

          編譯器gcc把預(yù)處理后的文件進(jìn)行語(yǔ)法分析、語(yǔ)義分析以及優(yōu)化后生成匯編代碼文件。

          執(zhí)行的命令:gcc -S test.i -o test.s

          3、匯編(生成.o文件)

          匯編器把匯編代碼文件轉(zhuǎn)換成中間目標(biāo)文件

          執(zhí)行的命令:gcc -c test.s -o test.o  (注意:這里是小寫的-c,而不是大寫的-C,本人在此處踩坑,出現(xiàn)異常)

          4、鏈接(生成可執(zhí)行文件)

          鏈接器ld把目標(biāo)文件與所需要的所有的附加的目標(biāo)文件(如靜態(tài)鏈接庫(kù)、動(dòng)態(tài)鏈接庫(kù))鏈接起來(lái)成為可執(zhí)行的文件

          執(zhí)行的命令:gcc test.o -o test




          關(guān)鍵詞: Linux C語(yǔ)言 開發(fā)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();