9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>知識大全>知識百科>公共基礎知識>

編譯與鏈接的區別

時間: 映芳735 分享

  編譯和鏈接都是為將用戶程序從硬盤上調入內存并將其轉換為可執行程序服務的。用編譯器時的compile就是在進行編譯,link就是鏈接,它們兩者之間還有什么區別呢?下面,學習啦小編帶你去看一看。

  在多道程序環境中,要想將一個用戶源代碼變成一個可以在內存中執行的程序,通常分為三個步驟:編譯、鏈接、載入。

  一、含義

  (1)編譯:由編譯程序將用戶的源代碼編譯成若干個目標模塊。

  (2)鏈接:由鏈接程序將編譯后形成的一組目標模塊以及它們所需要的庫函數鏈接在一起,形成一個完整的載入模塊。

  (3)載入:由載入程序將載入模塊載入內存

  二、分類

  鏈接分三種:靜態鏈接、載入時動態鏈接、運行時動態鏈接,現在流行的是運行時動態鏈接,這種不僅可以回憶程序的載入過程,而且節省了大量的內存空間。

  三、編譯和鏈接的區別

  無論是C/C++,首先要把源文件編譯成中間代碼文件,在Windows下面就是.obj文件,Unix、Linux下面就是.o文件,即Object File,這個動作叫編譯(compile)。然后再把大量的Object File合成執行文件,這個動作叫作鏈接(link)。

  編譯時,編譯器需要的是語法的正確,函數與變量的聲明的正確。一般來說,每個源文件都應該對應于一個中間目標文件(.o文件或是.obj文件)。

  鏈接時,主要是鏈接函數和全局變量,所以,我們可以使用這些中間目標文件(.o文件或是.obj文件)來鏈接我們的應用程序。鏈接就是那些目標文件之間相互鏈接自己所需要的函數和全局變量,而函數可能來源于其他目標文件或庫文件。

  源文件首先會生成中間目標文件,再由中間目標文件生成執行文件。在編譯時,編譯器只檢測程序語法,和函數、變量是否被聲明。如果函數未被聲明,編譯器會給出一個警告,但可以生成Object File。而在鏈接程序時,鏈接器會在所有的Object File中找尋函數的實現,如果找不到,那到就會報鏈接錯誤碼(Linker Error),在VC下,這種錯誤一般是:Link 2001錯誤,意思說是說,鏈接器未能找到函數的實現,需要指定函數的Object File。

  小編提示

  編譯的時候采用 -Lxxx -lyyy 的形式使用庫,-L和-l這個參數并沒有配對的關系,我們的一些Makefile 為了維護方便把他們寫成配對的形式,造成了誤解.其實完全可以寫成 -Lpath1, -Lpath2, -Lpath3, -llib1 這樣的形式。

  在具體鏈接的時候,gcc是以.o文件為單位, 編譯的時候如果寫 g++ -o main main.cpp libx.o 那么無論main.cpp中是否使用到libx.o,libx.o中的所有符號都會被載入到mian函數中.但是如果是針對.a,寫成g++ -o main main.cpp -L./ -lx, 這個時候gcc在鏈接的時候只會鏈接有被用到.o, 如果出現libx.a中的某個.o文件中沒有任何一個符號被main用到,那么這個.o就不會被鏈接到main中重定位。

  經過上面的符號解析后,所有的符號都可以找到它所對應的實際位置(U表示的鏈接找到具體的符號位置).

  as 匯編生成一個目標模塊的時候,它不知道數據和代碼在最后具體的位置,同時也不知道任何外部定義的符號的具體位置,所以as在生成目標代碼的時候,對于位置未知的符號,它會生成一個重定位表目,告訴鏈接器在將目標文件合并成可執行文件時候如何修改地址成最終的位置。

  采用gcc 和g++ 在編譯的時候產生的符號有所不同。

  在C++中由于要支持函數重載,命名空間等特性,g++會把函數+參數(可能還有命名空間),把函數命變成一個特殊并且唯一的符號名.例如:int foo(int a);

  在gcc編譯后,在符號表中的名字就是函數名foo, 但是在g++編譯后名字可能就變成了_Z3fooi, 我們可以使用 c++filt命令把一個符號還原成它原本的樣子。

534880 主站蜘蛛池模板: 国产伦一区二区三区久久| 久久一区二区三区黄色片| 人妻聚色窝窝人体WWW一区| 五级黄高潮片90分钟视频| 国产草草影院ccyycom| 美女内射福利大全在线看| 69精品丰满人妻无码视频a片| 一本精品99久久精品77| 午夜精品一区二区三区成人| 亚洲午夜久久久久久噜噜噜 | 老熟妇欲乱一区二区三区| 在线天堂中文新版www| 日韩精品国产二区三区| 成人无套少萝内射中出| 熟女系列丰满熟妇AV| 国产日韩综合av在线| 成人免费av色资源日日| 精品无码国产污污污免费| 激情综合五月网| 制服丝袜美腿一区二区| 成人免费乱码大片a毛片| 一级女性全黄久久生活片| 亚洲区欧美区综合区自拍区| 日本黄页网站免费观看| 精品国产性色av网站| 草草浮力影院| 亚洲一级片一区二区三区| 久久99国产一区二区三区| 亚洲超碰97无码中文字幕| 久久久这里只有精品10| 日99久9在线 | 免费| 国产极品嫩模在线观看91| 久久亚洲精品无码播放| 中文人妻av高清一区二区| 国产一区二区黄色在线观看| 亚洲熟女乱色综合亚洲图片| 一本加勒比hezyo无码人妻| 麻豆国产成人AV在线播放| 亚洲久悠悠色悠在线播放| 久久婷婷五月综合色99啪ak| 欧美精品一区二区在线观看播放|