歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言調試過程中Duplicate Symbol錯誤分析

C語言調試過程中Duplicate Symbol錯誤分析

日期:2017/3/1 9:11:30   编辑:Linux編程

說明:在我們調試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語言開發中,不允許在源文件中引入其他的源文件,只可以引入頭文件呦! 

Copyright © Linux教程網 All Rights Reserved