溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析C++中的編譯與鏈接

發(fā)布時間:2021-12-08 17:11:08 來源:億速云 閱讀:143 作者:柒染 欄目:開發(fā)技術

如何分析C++中的編譯與鏈接,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

前言:

C++有個最大的特點,那便是編譯型語言,相比于Python這種解釋型語言,C++在編譯階段就進行了許多處理,在執(zhí)行階段便具有高效性,本篇主要講解C++中的編譯與鏈接;

一、編譯與鏈接模型

1、一開始的C++是一個簡單的加工模型,如下圖所示:

如何分析C++中的編譯與鏈接

這樣會存在一些問題:

  • 無法處理大型程序

  • 加工耗時較長

  • 即使少量修改,也需要全部重新加工

2、為了解決以上問題,引入了分塊處理的方式:

如何分析C++中的編譯與鏈接

編譯鏈接模型的好處:

  • 編譯耗資源但一次處理輸入較少

  • 鏈接輸入較多但處理速度快

  • 便于程序修改(只需修改一部分)

在引入分塊處理后,出現了一些常見概念:

①定義與聲明:一個變量在只需在一個文件中定義,其他文件可通過聲明該變量;

②頭文件與源文件:由于聲明的變量、函數過多,可將聲明放在頭文件中,在源文件中引用頭文件加載這些聲明;

③翻譯單元:源文件 + 相關頭文件(直接/間接)- 應忽略的預處理語句(宏定義不符合條件的);

二、編譯與鏈接流程

下面通過一個實際例子,講解程序如何從cpp一步步到可執(zhí)行文件的;

下圖為一個整體流程圖:

如何分析C++中的編譯與鏈接

1、預處理階段:將cpp或c的源程序進行處理(頭文件展開等),轉換成以i結尾的翻譯單元文件

g++ -E ./main.cpp -o ./main.i

2、編譯階段:生成編譯后以s為后綴的匯編代碼文件

g++ main.i -S -o main.s

3、匯編階段:將匯編代碼進行匯編生成以o為后綴目標文件

4、鏈接階段:合并多個目標文件,關聯聲明與定義,生成可執(zhí)行程序

以上為系統內部具體的實現操作,我們在實際運行中可以通過一行命令實現編譯鏈接:

g++ ./main.cpp -o ./main

注意點:在用IDE編譯程序時,往往會有兩種模式:Debug和Release,Debug在開發(fā)中使用,優(yōu)化較少,Release在最終程序編譯使用,優(yōu)化較多

關于如何分析C++中的編譯與鏈接問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI