請服用《Advanced C and C++ Compiling》,包治好。下面是我的一點理解:編譯,一般就是把原始檔轉化成一個一個的二進位制的目標檔案。會留下一些坑,就是一些使用的其他檔案的裡的函式和變數會暫時不明確具體訪問地址,留給下一步解決。連結,填編譯階段留下的坑,把沒有確定訪問地址變數函式都一個個設定好,然後把所有輸入的目標檔案按照一定格式組成輸出檔案,一般就是可執行檔案或者庫檔案,可執行檔案不說,庫檔案就是打包好的目標檔案,給別人用的。.h,實際上就是普通檔案,特殊的字尾名而已,你自己用什麼字尾名無所謂,和.c沒什麼區別,include動作,實際上就是可以理解為copy過來,你也可以include .c啊。.o ,編譯產生的目標檔案,有一定格式的二進位制檔案,除了除了頭資訊,debug資訊之外,仔細觀察,實際上就是平臺的機器碼。.dll,動態庫,庫檔案,可以理解裡面是具體的函式二進位制打包,給其他可執行程式用的,好像,也有自己就能執行的。動態就是編譯的時候只指定lib路徑和宣告就行,不會實際組成可執行檔案,實際執行的時候作業系統會load這些動態庫,給可執行程式使用。對應的是靜態庫,連結的時候就組成到可執行檔案裡,一般字尾.a,不用load.就醬。
請服用《Advanced C and C++ Compiling》,包治好。下面是我的一點理解:編譯,一般就是把原始檔轉化成一個一個的二進位制的目標檔案。會留下一些坑,就是一些使用的其他檔案的裡的函式和變數會暫時不明確具體訪問地址,留給下一步解決。連結,填編譯階段留下的坑,把沒有確定訪問地址變數函式都一個個設定好,然後把所有輸入的目標檔案按照一定格式組成輸出檔案,一般就是可執行檔案或者庫檔案,可執行檔案不說,庫檔案就是打包好的目標檔案,給別人用的。.h,實際上就是普通檔案,特殊的字尾名而已,你自己用什麼字尾名無所謂,和.c沒什麼區別,include動作,實際上就是可以理解為copy過來,你也可以include .c啊。.o ,編譯產生的目標檔案,有一定格式的二進位制檔案,除了除了頭資訊,debug資訊之外,仔細觀察,實際上就是平臺的機器碼。.dll,動態庫,庫檔案,可以理解裡面是具體的函式二進位制打包,給其他可執行程式用的,好像,也有自己就能執行的。動態就是編譯的時候只指定lib路徑和宣告就行,不會實際組成可執行檔案,實際執行的時候作業系統會load這些動態庫,給可執行程式使用。對應的是靜態庫,連結的時候就組成到可執行檔案裡,一般字尾.a,不用load.就醬。