色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux系統下C/C++的編譯流程與步驟

嵌入式學習站 ? 來源:嵌入式學習站 ? 作者:嵌入式學習站 ? 2022-11-08 16:11 ? 次閱讀

編譯流程分為四個階段:預處理、編譯、匯編、鏈接

Linux系統下g++編譯為例:

通過g++的選項可以查看過程中的每一步

預處理:處理一些#號定義的命令或語句(如#define、#include、#ifdef等),生成.i文件

編譯:進行詞法分析、語法分析和語義分析等,生成.s的匯編文件

匯編:將對應的匯編指令翻譯成機器指令,生成二進制.o目標文件

鏈接:鏈接分為兩種

靜態鏈接

在鏈接期,將靜態鏈接庫中的內容直接裝填到可執行程序中。

在程序執行時,這些代碼都會被裝入該進程的虛擬地址空間中。

動態鏈接

在鏈接期,只在可執行程序中記錄與動態鏈接庫中共享對象的映射信息

在程序執行時,動態鏈接庫的全部內容被映射到該進程的虛擬地址空間。其本質就是將鏈接的過程推遲到運行時處理

擴展:

01 為什么要有靜態鏈接?

在我們的實際開發中,不可能將所有代碼放在一個源文件中,所以會出現多個源文件,而且多個源文件之間不是獨立的,而會存在多種依賴關系,如一個源文件可能要調用另一個源文件中定義的函數,但是每個源文件都是獨立編譯的,即每個.c文件會形成一個.o文件,為了滿足前面說的依賴關系,則需要將這些源文件產生的目標文件進行鏈接,從而形成一個可以執行的程序。這個鏈接的過程就是靜態鏈接

由很多目標文件進行鏈接形成的是靜態庫,反之靜態庫也可以簡單地看成是一組目標文件的集合,即很多目標文件經過壓縮打包后形成的一個文件

02 靜態鏈接的優缺點缺點:

浪費空間,因為每個可執行程序中對所有需要的目標文件都要有一份副本,如果運行多個程序并且這些程序都對同一個目標文件有依賴,那么目標文件在內存中就會存在多個副本;

更新困難,因為每當一個依賴文件的代碼修改了,這個時候就需要全部重新編譯鏈接形成新的可執行程序。

優點:

運行速度快并且不依賴外部環境,因為在可執行程序中已經具備了所有執行程序所需要的任何東西,在執行的時候運行速度快。

注意:我們知道,鏈接器在鏈接靜態鏈接庫的時候是以目標文件為單位的。比如我們引用了靜態庫中的printf()函數,那么鏈接器就會把庫中包含printf()函數的那個目標文件鏈接進來,如果很多函數都放在一個目標文件中,很可能很多沒用的函數都被一起鏈接進了輸出結果中。由于運行庫有成百上千個函數,數量非常龐大,每個函數獨立地放在一個目標文件中可以盡量減少空間的浪費,那些沒有被用到的目標文件就不要鏈接到最終的輸出文件中。

03 為什么要有動態鏈接?

為了解決靜態鏈接中提到的兩個問題,一方面是空間浪費,另外一方面是更新困難。

流程簡介:

假設現在有兩個程序program1.o和program2.o,這兩者共用同一個庫lib.o,假設首先運行程序program1,系統首先加載program1.o,當系統發現program1.o中用到了lib.o,即program1.o依賴于lib.o,那么系統接著加載lib.o,如果program1.o和lib.o還依賴于其他目標文件,則依次全部加載到內存中。當program2運行時,同樣的加載program2.o,然后發現program2.o依賴于lib.o,但是此時lib.o已經存在于內存中,這個時候就不再進行重新加載,而是將內存中已經存在的lib.o映射到program2的虛擬地址空間中,從而進行鏈接.

04 動態鏈接的優缺點優點:

節約內存:即使需要每個程序都依賴同一個庫,但是該庫不會像靜態鏈接那樣在內存中存在多分,副本,而是這多個程序在執行時共享同一份副本;

更新方便:更新時只需要替換原來的目標文件,而無需將所有的程序再重新鏈接一遍。當程序下一次運行時,新版本的目標文件會被自動加載到內存并且鏈接起來,程序就完成了升級的目標。

缺點:

性能略差:因為把鏈接推遲到了程序運行時,所以每次執行程序都需要進行鏈接,所以性能會有一定損失。

依賴外部環境:因為把鏈接推遲到了程序運行時,所以要保證程序運行時外部的庫存在且內容正確無誤。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11342

    瀏覽量

    210145
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73792

原文標題:C/C++的編譯流程?

文章出處:【微信號:嵌入式學習站,微信公眾號:嵌入式學習站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    HighTec C/C++編譯器套件全面支持芯來RISC-V IP

    德國薩爾布呂肯,2024年12月5日——世界領先的汽車C/C++編譯器解決方案提供商HighTec EDV Systeme GmbH宣布全面支持芯來科技的RISC-V IP。HighTec編譯
    的頭像 發表于 12-23 09:04 ?305次閱讀
    HighTec <b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器套件全面支持芯來RISC-V IP

    HighTec C/C++編譯器支持Andes晶心科技RISC-V IP

    汽車編譯器解決方案領先供貨商HighTec EDV-Systeme GmbH宣布其針對汽車市場的高度優化C/C++編譯器支持Andes晶心科技的RISC-V IP。這項支持對汽車軟件開
    的頭像 發表于 12-12 16:26 ?323次閱讀

    MSP430優化C/C++編譯器v21.6.0.LTS

    電子發燒友網站提供《MSP430優化C/C++編譯器v21.6.0.LTS.pdf》資料免費下載
    發表于 11-08 14:57 ?0次下載
    MSP430優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器v21.6.0.LTS

    ARM優化C/C++編譯器 v20.2.0.LTS

    電子發燒友網站提供《ARM優化C/C++編譯器 v20.2.0.LTS.pdf》資料免費下載
    發表于 11-07 10:46 ?0次下載
    ARM優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器 v20.2.0.LTS

    TMS320C6000優化C/C++編譯器v8.3.x

    電子發燒友網站提供《TMS320C6000優化C/C++編譯器v8.3.x.pdf》資料免費下載
    發表于 11-01 09:35 ?0次下載
    TMS320<b class='flag-5'>C</b>6000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器v8.3.x

    TMS320C28x優化C/C++編譯器v22.6.0.LTS

    電子發燒友網站提供《TMS320C28x優化C/C++編譯器v22.6.0.LTS.pdf》資料免費下載
    發表于 10-31 10:10 ?0次下載
    TMS320<b class='flag-5'>C</b>28x優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器v22.6.0.LTS

    C7000優化C/C++編譯

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器

    linux驅動程序的編譯方法有哪兩種

    Collection)或其他C/C++編譯器來編譯源代碼文件。這種方法較為原始,需要開發者手動指定編譯器選項、包含路徑、庫文件等。然而,在
    的頭像 發表于 08-30 14:39 ?879次閱讀

    OpenHarmony標準系統C++公共基礎類庫案例:HelloWorld

    1、程序簡介該程序是基于凌蒙派OpenHarmony-v3.2.1標準系統C++公共基礎類庫的簡單案例:HelloWorld。主要講解C++公共基礎類庫案例如何搭建和編譯。2、程序解析
    的頭像 發表于 08-13 08:23 ?557次閱讀
    OpenHarmony標準<b class='flag-5'>系統</b><b class='flag-5'>C++</b>公共基礎類庫案例:HelloWorld

    C++中實現類似instanceof的方法

    并執行特定于類型的操作。無論是在編譯時檢查類型,還是在運行時動態標識對象類型,C++ 都提供了強大的機制來獲取類型信息
    的頭像 發表于 07-18 10:16 ?651次閱讀
    <b class='flag-5'>C++</b>中實現類似instanceof的方法

    SEGGER編譯器優化和安全技術介紹 支持最新CC++語言

    SEGGER編譯器是專門為ARM和RISC-V微控制器設計的優化C/C++編譯器。它建立在強大的Clang前端上,支持最新的C
    的頭像 發表于 06-04 15:31 ?1511次閱讀
    SEGGER<b class='flag-5'>編譯</b>器優化和安全技術介紹 支持最新<b class='flag-5'>C</b>和<b class='flag-5'>C++</b>語言

    keil用c++編譯含有rtos模塊時的錯誤問題怎么解決?

    近期看到一個哥們用c++寫嵌入式,感覺蠻有趣,如果當初我的程序要是能用類就輕松多了,所以也想嘗試一。雖然不會c++但是還是多少會用簡單的class,這個c#上用了不少。我的工程包括u
    發表于 05-09 08:29

    c語言,c++,java,python區別

    操作系統、嵌入式系統等對性能要求較高的場景。C語言的語法相對簡單,學習曲線較平緩,也是學習其他高級語言的入門語言。 C++C++是在
    的頭像 發表于 02-05 14:11 ?2551次閱讀

    C++Linux內核開發中從爭議到成熟

    Linux 內核郵件列表中一篇已有六年歷史的老帖近日再次引發激烈討論 —— 主題是建議將 Linux 內核的開發語言從 C 轉換為更現代的 C++
    的頭像 發表于 01-31 14:11 ?670次閱讀
    <b class='flag-5'>C++</b>在<b class='flag-5'>Linux</b>內核開發中從爭議到成熟

    RX系列V3.06.00的C/C++編譯器包數據手冊

    電子發燒友網站提供《RX系列V3.06.00的C/C++編譯器包數據手冊.pdf》資料免費下載
    發表于 01-26 15:57 ?1次下載
    RX系列V3.06.00的<b class='flag-5'>C</b>/<b class='flag-5'>C++</b><b class='flag-5'>編譯</b>器包數據手冊
    主站蜘蛛池模板: 父亲在线日本综艺免费观看全集 | 福利免费观看体检区 | qovd电影 | 棉签和冰块怎么弄出牛奶视频 | 18禁裸乳无遮挡免费网站 | 日韩中文欧美在线视频 | 国产精品亚洲电影久久成人影院 | 黑色丝袜美女被网站 | 亚洲色图激情文学 | 九色终合九色综合88 | 特大黑人娇小亚洲女mp4 | 男gv纯肉免费视频 | 果冻传媒在线观看完整版免费 | 亚洲春色AV无码专区456 | 动漫成年美女黄漫网站 | 免费国产成人手机在线观看 | 亚洲免费无码中文在线亚洲在 | 美女动态图真人后进式 | 99精品国产电影 | 色噜噜噜亚洲男人的天堂 | 伦 乱真实故事 | 亚洲精品无码AAAAAA片 | xxxxx俄罗斯| 狠狠鲁快播 | 里番acg纲手的熟蜜姬训练场 | 国产午夜亚洲精品理论片八戒 | 亚洲精品自在在线观看 | 在线观看日韩一区 | 狠狠色狠狠色综合日日32 | 美国色吧影院 | 麻豆国产96在线日韩麻豆 | 国产精品热久久高潮AV袁孑怡 | 青柠在线观看免费全集 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲精品国偷拍自产在线 | 护士的下面又湿又紧10P | 美女一级毛片免费不卡视频 | 国产69TV精品久久久久99 | 91日本在线观看亚洲精品 | 国产欧美在线亚洲一区刘亦菲 | 黑色丝袜美女被网站 |