c++程序編譯分成四個過程:編譯預處理,編譯,匯編,鏈接
編譯預處理:處理以#為開頭
編譯:將.cpp文件翻譯成.s匯編文件
匯編:將.s匯編文件翻譯成機器指令.o文件
鏈接:匯編生產的目標文件.o文件,并不會立即執行,因為可能會出現.cpp文件中的函數會引用到某個庫的函數或者另一個文件中定義的符號,鏈接的目的是將這些文件對于的目標文件連接成一個整體,從而生成可執行文件
整體流程:
鏈接分為兩種:
靜態鏈接:靜態鏈接是在鏈接階段,將源代碼中用到的庫函數與匯編生成的目標文件.o合并生成可執行文件
動態鏈接:動態鏈接是將程序按照模塊劃分為各個獨立的部分,在程序運行過程將用到鏈接成一個可執行文件
優缺點:
靜態鏈接:浪費空間,每個可執行文件都會有目標文件的副本,如果要進行更新操作的話,就需要重新進行編譯生成可以執行文件(更新困難);優點:執行的時候運行速度快
動態鏈接:節省內存,更新方便;但是動態鏈接是在運行是進行鏈接,所有相對于靜態鏈接來說速度會慢些