linuxgcc编译c文件(linux gcc 编译)
如何用arm-linux-gcc編譯驅(qū)動程序,Makefile文件怎么寫?
這個(gè)沒有什么特殊的要求。你只要按照你需要的正確的語法規(guī)則和編譯順序,將 gcc 編譯器對 C 語言源程序的編譯選項(xiàng)(例如:對源程序只編譯不連接的選項(xiàng)為:-c、或者是生成指定的運(yùn)行文件:-o my_outputfile,等等)寫到 makefile 文本文件中即可。 但是一定要注意它們之間在 makefile 文件之間的前后順序。
虛擬機(jī)上的Linux系統(tǒng)怎么安裝gcc編譯器?
如果Linux服務(wù)器能夠上網(wǎng)的話,使用 yum命令安裝安裝gcc yum install gcc 安裝g++ yum install gcc-c++如果是純手工安裝RPM包的話,比較繁。要依賴包一個(gè)一個(gè)安裝上去,最后再安裝gccrpm -ivh kernel-headers-2.6.32-431.el6.x86_64.rpmrpm -ivh glibc-headers-2.12-1.132.el6.x86_64.rpmrpm -ivh glibc-devel-2.12-1.132.el6.x86_64.rpmrpm -ivh libgomp-4.4.7-4.el6.x86_64.rpmrpm -ivh ppl-0.10.2-11.el6.x86_64.rpmrpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpmrpm -ivh mpfr-2.4.1-6.el6.x86_64.rpmrpm -ivh cpp-4.4.7-4.el6.x86_64.rpmrpm -ivh gcc-4.4.7-4.el6.x86_64.rpm
gcc四個(gè)階段?
GCC 編譯可以分為4個(gè)階段:預(yù)處理(pre-processing)、編譯(compiling)、匯編(assembling)、鏈接(linking)。
一、預(yù)處理階段 gcc -E hello.c -o hello.i
GCC預(yù)處理階段第一個(gè)主要完成的工作是頭文件展開,例如一開始#include <stdio.h>,那么預(yù)處理階段就會把這個(gè)stdio.h文件加載到你的.c中去,這邊還有一個(gè)要注意的是#include "stdio.h" 和 #include <stdio.h> 的區(qū)別,<>這個(gè)尖括號符號代表的意思是讓程序在預(yù)處理階段加載文件的時(shí)候到預(yù)定義的缺省路徑下尋找該文件,那缺省路徑是什么呢?在LINUX下可以使用 echo | gcc -E -v - 來顯示出include包含的路徑
二、編譯階段 gcc -S hello.i -o hello.s
gcc在編譯階段進(jìn)行代碼的規(guī)范性檢查以及代碼是否有語法錯(cuò)誤,如果沒有就生成.s匯編文件。關(guān)于匯編本人表示也不太會,如果有興趣的讀者可以自己搜索其他相關(guān)文章學(xué)習(xí)匯編語言。
三、匯編階段 gcc -c hello.s -o hello.o
將編譯生成的匯編文件轉(zhuǎn)換成二進(jìn)制代碼文件.o文件。
四、鏈接階段 gcc hello.c -o hello.exe
一旦完成這個(gè)階段就會直接生成一個(gè)可執(zhí)行文件。那么鏈接階段到底干了什么呢?
我們都知道預(yù)處理的時(shí)候雖然加載了stdio.h,但是這個(gè)頭文件里面全都是一些聲明,并沒有具體的代碼實(shí)現(xiàn),例如調(diào)用了printf函數(shù)的時(shí)候,stdio.h里面沒有實(shí)現(xiàn)代碼,所以鏈接階段主要的工作就是鏈接所需要的函數(shù)庫。printf這個(gè)函數(shù)是在libc.so.6這個(gè)庫里面,所以鏈接階段gcc編譯器會鏈接到這個(gè)庫,所以就實(shí)現(xiàn)了這個(gè)函數(shù)的調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的linuxgcc编译c文件(linux gcc 编译)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诛仙苹果安卓可以一起玩吗(诛仙苹果安卓)
- 下一篇: win7 activemq_带有骆驼,A