在終端中輸入 gcc 文件名 -o 目標文件名
然後 ./目標文件名 就行了,沒有目標文件名,自動存為 a
執行 ./a 就行了。
在使用Gcc編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,其中多數參數我們可能根本就用不到,這里只介紹其中最基本、最常用的參數。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
-c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。
-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。
-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。
-O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。
-O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。
-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。C程序中的頭文件包含兩種情況∶
A)#include <myinc.h>
B)#include 「myinc.h」
其中,A類使用尖括弧(< >),B類使用雙引號(「 」)。對於A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而B類,預處理程序在目標文件的文件夾內搜索相應文件。
GCC執行過程示例
示例代碼 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
預編譯過程:
這個過程處理宏定義和include,並做語法檢查。
可以看到預編譯後,代碼從5行擴展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
編譯過程:
這個階段,生成匯編代碼。
gcc -S a.i -o a.s
cat a.s | wc -l
59
匯編過程:
這個階段,生成目標代碼。
此過程生成ELF格式的目標代碼。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
鏈接過程:
鏈接過程。生成可執行代碼。鏈接分為兩種,一種是靜態鏈接,另外一種是動態鏈接。使用靜態鏈接的好處是,依賴的動態鏈接庫較少,對動態鏈接庫的版本不會很敏感,具有較好的兼容性;缺點是生成的程序比較大。使用動態鏈接的好處是,生成的程序比較小,佔用較少的內存。
gcc a.o -o a
程序運行:
./a
hello
編輯本段
GCC編譯簡單例子
編寫如下代碼:
#include <stdio.h>
int main()
{
printf("hello,world!\n");
}
執行情況如下:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.c -o hello
./hello
hello,world!
② 在Linux下如何使用GCC編譯程序、簡單生成 靜態庫及動態庫
一個程序調用了一個動態庫,但是兩者之間有函數重名,導致運行時動態庫中的Linux下動態庫文件的擴展名為這樣,線程函數庫被稱作libthread.so。靜態庫的
③ 怎麼在命令行里用gcc去編譯連接一個程序
你的說法本身就有問題,gcc編譯的時候只能去鏈接 其他依賴文件和庫(靜態庫/動態庫)
動態庫:.so結尾,在運行時載入。
靜態庫:.a結尾,在編譯時載入。
例如編譯hello.c 輸出hello可執行文件
鏈接靜態庫:
gcc hello.c -L /home/lib -static -l mylib -o hello
-L參數可以向gcc的庫文件搜索路徑中添加新目錄
-static選項強制使用靜態鏈接庫
-l mylib -l後面是要靜態連接的庫(libhellos.a)
鏈接動態庫:
gcc -o hello hello.c -L. -lhello
-L後面的點為當前目錄
-lhello 是去鏈接libhello.so
④ gcc編譯流程
gcc編譯分為四部;
第一步,預編譯,將程序中的宏定義等預編譯;
第二步,編譯,將*.h,*.c等文件編譯成為*.o文件;
第三步,匯編;
第四步,連接,將*.o文件連接庫,生成可執行文件!
⑤ 的程序在Gcc下怎麼編譯
關於 C 語言源程序,最簡單的使用方式就是:gcc my_program.c <cr>,如果沒有程序錯誤的話,gcc 編譯器會生成一個預設的可執行程序:a.out 。
常用的有:gcc -o my_runfile my_program.c <cr>
使用 my_runfile 運行文件名代替預設的可執行程序 a.out
gcc -c my_program.c <cr>
只編譯,不連接。生成一個 my_program.o 的文件。
如果還需要更多的選項,那就需要查看 gcc 的編譯選項了。當然了,如果程序的規模再要大的話,那就需要編寫 makefile 文件,以及 make 工具對 makefile 進行管理了。
⑥ 為什麼我手機已經安裝了GCC,c4droid還是要讓我安裝GCC呢,而且一直還編譯不了代碼,SDL
是不是你安裝的不支持你的手機吶?你去找適合你的手機的不就行了
⑦ linux系統下SDL的應用
SDL庫主要在游戲、多媒體等應用上使用。
GTK,QT是GUI庫。
兩者的應用方向是不一樣的。
當然,軟體這種東西,沒有不可能,只有想不到。技術上,使用SDL庫,當然也可以開發桌面系統。但是這有點像拿治感冒的葯,來解決失眠問題。雖然,你可能也會困,但是不如直接吃安眠葯來的快:)
同樣道理,GTK,QT更適合於開發GUI。用這些庫畫窗口,畫對話框,進度條什麼的控制項,會比較方便。道理類似於,你在Windows中使用MFC,1分鍾就能出來一個支持窗口界面來:)這要比自己,一個矩形一個矩形畫,要方便多了吧?
另外,Qt, GTK是基於X系統的Xlib庫的,這也是一些歷史原因吧。因為,我們目前使用的桌面系統基本都是基於X系統的。
另外,說的那個插件沒有用過。你可以說下那個3D插件的名字,咱們可以一起探討下。
我估計那個3D插件應該只是對一些底層函數庫的進一步封裝而已,讓你更方便的製作出比較炫的效果出來。
另外,OpenGL主要用於3D加速,目前的X系統對這部分支持的也算不錯了。
⑧ gcc編譯程序時怎麼連接.lds
有兩種使用方法:
1,lds作為外置腳本,參與對gcc鏈接過程的控制。使用方法為
gcc XXX.c XX.lds。
gcc能夠自動識別你的文件列中後綴不能識別的文件,作為鏈接腳本使用。這樣編譯出來的程序,還是要使用gcc默認的lds腳本,你的腳本只是一個輔助。
2,lds代替系統的腳本。
這種要先使用gcc -c參數編譯你的源程序,編譯出來的.o文件,使用命令ld -T來指定lds文件鏈接到一起。
⑨ 有沒裝好GCC for droid和SDL的C4droid吖他丫的,我裝了好多次,可是一點效果也
自己網路"GCC_SDL_FOR-C4droid"跳出有直接下載兩個最新插件(GCC。。。SDL。。)的地
址,在該頁面也有下載c4droid主程序的下載鏈接。下載後先安裝插件,成功後安裝主程序,插件會自動解壓,解壓時自動彈出一個窗口,點擊yes就OK了,自動把插件數據解壓到主程序了。編寫程宇時在菜單/preference/setting complied/G ,編譯C ,當然也可能會因為手機不一樣,有些最新版本運行不了,或者是GCC和SDL只能有一個正常,也或者c4可用,但兩個插件用不了,這樣換舊的插件版本試一下,因為現在網上比較亂,有些軟體是大神改的,又或者手機原因,自己找吧,一般安卓手機都可以用的!