目錄
一.gcc編譯C語言程式
二.makefile編譯C語言程式
三.編譯程序中遇到的問題
題目:撰寫一個主程式檔案main1.c和一個子程式檔案sub1.c,有如下要求:子程式sub1.c包含一個算術運算函式float x2x(int a,int b),此函式功能為對兩個輸入整型引數做某個運算,將結果做浮點數回傳;主程式main1.c定義并賦值兩整型變數,然后呼叫函式x2x,將x2x的回傳結果printf出來,(1)請在ubuntu系統中用gcc命令列方式編譯主程式main1.c并運行;(2)請在windows系統下用你熟悉的編譯工具編譯主程式main1.c并運行;(3)在ubuntu系統下用makefile方式編譯主程式,
一.gcc編譯c語言程式
1.用vim創建main1.c檔案:

2.進入vim編輯器然后輸入"i"進入編輯模式,main1.c主程式的代碼內容如下:

3.主程式的代碼完成后按Esc鍵回傳普通模式,并在命令列中輸入“:wq"并回車,這樣能夠退出并保存主程式的vim編輯界面
4.用vim創建sub1.c檔案:

5.進入vim編輯器然后輸入"i"進入編輯模式,sub1.c子程式的代碼內容如下:

6.子程式的代碼完成后按Esc鍵回傳普通模式,并在命令列中輸入“:wq"并回車,這樣能夠退出并保存子程式的vim編輯界面
7.使用gcc轉化為可執行檔案:
注意:gcc 編譯檔案的具體程序是:源文(.c)---->目標檔案(.o)---->可執行檔案

8.運行生成的main1可執行檔案:

9.運行結果如下所示:

10.windows下用IDE執行相同的C程式,結果如下所示:

二.makefile編譯C語言程式
1.用vim創建makefile檔案

2.進入vim編輯器然后輸入"i"進入編輯模式,makefile程式的代碼內容如下:

3.同樣地,按Esc退出編輯模式,并在命令列處輸入":wq"再回車以保存并退出vim編輯界面
4.輸入make:

5.然后會得到makefile的運行結果:

6.再輸入makefile中all的可執行檔案:

7.最后得到程式的運行結果:

三.編譯程序中遇到的問題


原因:分隔符要使用Tab鍵,而不是自行輸入空格

原因:命名的all檔案與現目錄中的檔案重名
解決方法:在makefile檔案中加入“.PHONY:all"

3
原因:重復定義了某一函式,本例中顯示的是:“x2x"函式
通過搜集一些資料,看到有如下解釋可以幫助我們很好地理解:
“一般在.h檔案中應以一個變數或函式宣告時,在其他檔案中只要包含了這個.h檔案,編譯的時候就會獨立被編譯器解釋,然后每個.c檔案會產生獨立的識別符號和符號表,所以上述代碼在單獨編譯的時候不會報錯,語法是合法的,但是,最后在編譯器鏈接的時候,就會將工程中的所有符號整合在一起,由于檔案中有重復的變數或函式,于是就會出現重復定義的錯誤,系統給你的提示就是:multiple definiton of ‘xx’”
解決方法:在主程式中不再參考子程式,而是直接定義在子程式中被參考的方法即可
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-256wajHm-1601433065345)(C:\Users\嚴admin\Desktop\第一次作業\17.png)]示就是:multiple definiton of 'xx'”](https://img.uj5u.com/2020/10/02/1165550210072020.png)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/147938.html
標籤:其他
上一篇:VHDL:在Quartus II里撰寫8位加法器(第一次由代碼得到電路圖)
下一篇:03 Ef?cient Video Stitching Based on Fast Structure Deformation
