編譯和鏈接

         在多道程序的實現中,要想使源文件生成可執行文件通常需要兩個步驟編譯和鏈接,

        其中編譯是指將源文件編譯爲中間代碼文件,在linux中爲*.o文件,其實質就是由c或c++等高級語言生成彙編語言。

           鏈接:由鏈接程序將編譯後形成的一組目標模塊以及它們所需要的庫函數鏈接在一起,形成一個完整的載入模塊。實質爲將多箇中間代碼文件(包括靜態庫函數等)在統一的地址空間中生成可執行文件,

    我們以編譯c/c++爲例,在windows中編譯生成的爲.obj文件,在linux/unix中生成.o文件,在編譯的過程中主要是檢測語法是否正確,變量和函數是否聲明。當然對於extern聲明的變量和函數(定義在別的編譯文件中)會首先建立一個爲解決符號表,同時函數中聲明的全局變量也會放在一個解決符號表中。這兩個符號表留給鏈接的時候去處理。每個源文件生成對應的一個.o文件。

     當在鏈接的過程中時將所有的中間代碼文件相互鏈接自己需要的函數和全局變量,這些函數可以來源於其它目標文件,也可以來自庫文件。鏈接的過程實質就是爲所有的中間代碼文件進行統一的編址,例如在A源文件中調用了B文件中的方法,鏈接過程中就會找到B中方法的具體位置,並將該地址賦給A的調用函數,將A和B放在統一的虛擬地址空間中。

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章