說明:在我們調試C語言的過程中,經常會遇到duplicate symbol錯誤(在Mac平台下利用Xcode集成開發環境)。如下圖:
一.簡單分析一下C語言程序的開發步驟。
由上圖我們可以看出C語言由編寫源程序->編譯->鏈接->運行幾個步驟進行。
編寫源程序:
C語言的源文件的擴展名為.c,源文件以ASCII的形式存儲,不能直接被計算機執行。
編譯:
1.把C語言源程序翻譯成計算機可以識別的二進制代碼,由編譯器完成。
2.編譯的同時進行語法檢查,如果發現語法錯誤,則編譯失敗。如果編譯成功,生成擴展名為“.obj”的目標文件。
3.每個源文件是單獨進行編譯的,如果一個項目中有多個.c源文件,則會生成多個.obj目標文件。
鏈接:
1.將所有有關聯的obj目標文件,及系統提供的C庫函數等組合在一起生成可執行文件。
2.生成的可執行文件的文件名與源程序文件名形同,計算機可以直接執行。
運行:
雙擊即可運行生成的可執行文件。
二.錯誤原因
源文件中引入的另一個源文件。
例如:在main.c中#include<test.c>
三.錯誤分析
由於編譯的過程是對每個源文件單獨進行編譯的,如果單個源文件沒有語法錯誤,編譯就會通過。而鏈接過程是將所有有關聯的obj目標文件及系統的庫函數組合在一起。而include預處理指令類似與代碼的拷貝,並且C語言默認情況下不允許重復定義函數,因此引入的源文件中函數在鏈接時會報重復定義的錯誤。也就是我們看到的duplicate symbol錯誤。
小伙伴們,以後要注意了,在C語言開發中,不允許在源文件中引入其他的源文件,只可以引入頭文件呦!