linux下使用gcc編譯運行C/C++程序


編譯C 

首先,程序編譯過程有:

1.預處理(展開宏,頭文件,檢查代碼是否有誤)

2.編譯(將.c轉為匯編代碼.s)

3.匯編(將匯編代碼.s轉為機器代碼.o)

4.鏈接(將所有機器代碼.o和庫文件鏈接成一個可執行程序)

一般編譯常常包括了:預處理,編譯,匯編

 

在linux系統中,編譯c使用gcc編譯器,如下:

gcc -o  out     in1.c    in2.c    //gcc編譯以及鏈接(對in1文件和in2文件進行編譯生成out.bin文件,“-o”:表示生成可執行文件)
gcc -c    in1.c    in2.c   -o  out.o //gcc編譯不鏈接(對in1文件和in2文件文件進行編譯生成out.o文件,
“-c”:表示只生成*.o文件 第二個"-o":表示制定生成哪個.o文件)

(若只對單個文件編譯及鏈接,也可以直接輸入: gcc in.c, 系統默認編譯生成a.out可執行文件)

若需要在arm板里運行,就需要在linux系統中使用arm-linux-gcc交叉編譯才行:

arm-linux-gcc -o  out     in1.c    in2.c    //gcc編譯以及鏈接(對in1文件和in2文件進行編譯生成out.bin文件,“-o”:表示生成可執行文件)
arm-linux-gcc -c   in1.c    in2.c  -o  out.o // gcc編譯不鏈接(對in1文件和in2文件文件進行編譯生成out.o文件,
“-c”:表示只生成*.o文件 第二個"-o":表示指定生成哪個.o文件)

 

-I      //表示添加頭文件位置

 一般編譯程序時,說找到不到某個頭文件時,編譯時直接加上"-I  該頭文件目錄",即可編譯OK

-l                     //指定庫文件,l后面緊跟庫文件,比如數學庫:-lm,對應着libm.so文件,只需要去掉lib和.so即可

編譯程序時,一般說找不到某函數定義時,說不定就是沒加庫文件原因,比如找不到cos()函數定義,則編譯時直接加上"-lm"即可 

 

編譯C++ 

方法和上面類似,使用g++編譯器,只不過該編譯器會自動鏈接C++庫 

注意:若需要c++11標准,需要gcc 4.8以上

 

 

 


以編譯兩個C文件(a.c和hello.c)為示例:

vi a.c                                 //編輯a.c , 它將被hello.c調用,前提是這兩個文件必須在同一目錄下

內容如下:

vi hello.c                          //編輯hello.c

內容如下:

 

gcc -o hello  hello.c  a.c               //gcc編譯以及鏈接(對hello.c文件和a.c文件進行編譯生成hello.bin文件,“-o”:表示生成可執行文件)

./hello                                   //運行hello.bin

效果如下所示:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM