COMPILE && LINK

來源:互聯網
上載者:User

在這裡寫一下關於編譯和連結的個人心得。

COMPILE-->

XXX.CPP--->XXX.O 還必須提供三個表:未解決符號表,匯出符號表,地址重新導向表。

未解決符號表:是指該cpp檔案需要的相關變數或者函數的定義。

匯出符號表:是指該cpp檔案可以提供的變數和函數有哪些(外部連結方式)。

地址重新導向表:在進行外部連結之後,地址的重新地位。

LINK-->連結器進行連結的時候,首先決定各個目標檔案在最終可執行檔裡的位置。然後訪問所有目標檔案的地址重新導向表,對其中記錄的地址進行重新導向(即加上該編譯單元實際在可執行檔裡的起始地址)。然後遍曆所有目標檔案的未解決符號表,並且在所有的匯出符號表裡尋找匹配的符號,並在未解決符號表中所記錄的位置上填寫實際的地址(也要加上擁有該符號定義的編譯單元實際在可執行檔裡的起始地址)。最後把所有的目標檔案的內容寫在各自的位置上,再作一些別的工作,一個可執行檔就出爐了。


連結方式:

外部連結:是函數和變數的預設連結方式,就是cpp檔案裡的函數和變數編譯之後,在匯出符號表裡是要包含這些資訊的。

內部連結:如果static關鍵字位於全域函數或者變數的聲明的前面,表明該編譯單元不匯出這個函數/變數的符號。因此無法在別的編譯單元裡使用。(內部連結)。如果是static局部變數,則該變數的儲存方式和全域變數一樣,但是仍然不匯出符號。

注意:對於外部連結,必須保證在程式範圍內其他編譯單元不能出現重複的符號。內部連結,不能再其他編譯單元內使用。[在這裡,編譯單元就預設為cpp檔案]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.