在Linux下面,如果要編譯一個C語言源程序,我們要使用GNU的gcc編譯器,假設我們有下面一個非常簡單的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux
");
}
要編譯這個程序,我們只要在命令行下執行:
gcc -o hello hello.c
gcc 編譯器就會為我們生成一個hello的可執行文件.執行./hello就可以看到程
序的輸出結果了
『貳』 linux鐨刧cc鍛戒護linux鐨刧cc
linuxgcc緙栬瘧濂紺鏂囦歡鍚庣敓鎴.o鐩鏍囨枃浠訛紝浣嗘槸鍦ㄦ墽琛屼腑錛$./test錛夊嚭鐜版病鏈夐偅涓鏂囦歡鎴栫洰褰曪紝璇峰ぇ紲炲府蹇欙紵
.o鏂囦歡鏄涓嶈兘琚鎵ц岀殑錛宑鐨勬簮鐮佽佺粡榪囩紪璇戝拰閾炬帴鎵嶈兘鐢熸垚鍙鎵ц屾枃浠訛紝浣犲彧鏄緙栬瘧浜嗭紝娌℃湁閾炬帴錛岃繖涓鏂囦歡鐩稿綋浜嶹indows涓嬬殑test.obj鑰屽凡銆倈cc-Walltest.c-otest
Linux鐨刧cc鏄鎬庝箞鐢ㄧ殑錛
鍦ㄧ粓絝涓杈撳叆gcc鏂囦歡鍚-o鐩鏍囨枃浠跺悕鐒跺悗./鐩鏍囨枃浠跺悕灝辮屼簡錛屾病鏈夌洰鏍囨枃浠跺悕錛岃嚜鍔ㄥ瓨涓篴鎵ц./a灝辮屼簡銆傚湪浣跨敤Gcc緙栬瘧鍣ㄧ殑鏃跺欙紝鎴戜滑蹇呴』緇欏嚭涓緋誨垪蹇呰佺殑璋冪敤鍙傛暟鍜屾枃浠跺悕縐般侴CC緙栬瘧鍣ㄧ殑璋冪敤鍙傛暟澶х害鏈100澶氫釜錛屽叾涓澶氭暟鍙傛暟鎴戜滑鍙鑳芥牴鏈灝辯敤涓嶅埌錛岃繖閲屽彧浠嬬粛鍏朵腑鏈鍩烘湰銆佹渶甯哥敤鐨勫弬鏁般侴CC鏈鍩烘湰鐨勭敤娉曟槸鈭秅cc鍏朵腑options灝辨槸緙栬瘧鍣ㄦ墍闇瑕佺殑鍙傛暟錛宖ilenames緇欏嚭鐩稿叧鐨勬枃浠跺悕縐般-c錛屽彧緙栬瘧錛屼笉榪炴帴鎴愪負鍙鎵ц屾枃浠訛紝緙栬瘧鍣ㄥ彧鏄鐢辮緭鍏ョ殑.c絳夋簮浠g爜鏂囦歡鐢熸垚.o涓哄悗緙鐨勭洰鏍囨枃浠訛紝閫氬父鐢ㄤ簬緙栬瘧涓嶅寘鍚涓葷▼搴忕殑瀛愮▼搴忔枃浠躲-ooutput_filename錛岀『瀹氳緭鍑烘枃浠剁殑鍚嶇О涓簅utput_filename錛屽悓鏃惰繖涓鍚嶇О涓嶈兘鍜屾簮鏂囦歡鍚屽悕銆傚傛灉涓嶇粰鍑鴻繖涓閫夐」錛実cc灝辯粰鍑洪勮劇殑鍙鎵ц屾枃浠禷.out銆-g錛屼駭鐢熺﹀彿璋冭瘯宸ュ叿(GNU鐨刧db)鎵蹇呰佺殑絎﹀彿璧勮錛岃佹兂瀵規簮浠g爜榪涜岃皟璇曪紝鎴戜滑灝卞繀欏誨姞鍏ヨ繖涓閫夐」銆-O錛屽圭▼搴忚繘琛屼紭鍖栫紪璇戙佽繛鎺ワ紝閲囩敤榪欎釜閫夐」錛屾暣涓婧愪唬鐮佷細鍦ㄧ紪璇戙佽繛鎺ヨ繃紼嬩腑榪涜屼紭鍖栧勭悊錛岃繖鏍蜂駭鐢熺殑鍙鎵ц屾枃浠剁殑鎵ц屾晥鐜囧彲浠ユ彁楂橈紝浣嗘槸錛岀紪璇戙佽繛鎺ョ殑閫熷害灝辯浉搴斿湴瑕佹參涓浜涖-O2錛屾瘮-O鏇村ソ鐨勪紭鍖栫紪璇戙佽繛鎺ワ紝褰撶劧鏁翠釜緙栬瘧銆佽繛鎺ヨ繃紼嬩細鏇存參銆-Idirname錛屽皢dirname鎵鎸囧嚭鐨勭洰褰曞姞鍏ュ埌紼嬪簭澶存枃浠剁洰褰曞垪琛ㄤ腑錛屾槸鍦ㄩ勭紪璇戣繃紼嬩腑浣跨敤鐨勫弬鏁般侰紼嬪簭涓鐨勫ご鏂囦歡鍖呭惈涓ょ嶆儏鍐碘埗A)#includemyinc.h>B)#include鈥渕yinc.h鈥濆叾涓錛孉綾諱嬌鐢ㄥ皷鎷鍙(>)錛孊綾諱嬌鐢ㄥ弻寮曞彿(鈥溾)銆傚逛簬A綾伙紝棰勫勭悊紼嬪簭cpp鍦ㄧ郴緇熼勮懼寘鍚鏂囦歡鐩褰(濡/usr/include)涓鎼滃葷浉搴旂殑鏂囦歡錛岃孊綾伙紝棰勫勭悊紼嬪簭鍦ㄧ洰鏍囨枃浠剁殑鏂囦歡澶瑰唴鎼滅儲鐩稿簲鏂囦歡銆侴CC鎵ц岃繃紼嬬ず渚嬬ず渚嬩唬鐮乤.c錛#includestdio.h>intmain(){printf("hellon");}棰勭紪璇戣繃紼嬶細榪欎釜榪囩▼澶勭悊瀹忓畾涔夊拰include錛屽苟鍋氳娉曟鏌ャ傚彲浠ョ湅鍒伴勭紪璇戝悗錛屼唬鐮佷粠5琛屾墿灞曞埌浜910琛屻倈cc-Ea.c-oa.icata.c|wc-l5cata.i|wc-l910緙栬瘧榪囩▼錛氳繖涓闃舵碉紝鐢熸垚奼囩紪浠g爜銆倈cc-Sa.i-oa.scata.s|wc-l59奼囩紪榪囩▼錛氳繖涓闃舵碉紝鐢熸垚鐩鏍囦唬鐮併傛よ繃紼嬬敓鎴怑LF鏍煎紡鐨勭洰鏍囦唬鐮併倈cc-ca.s-oa.ofilea.oa.o:ELF64-bitLSBrelocatable,AMDx86-64,version1(SYSV),notstripped閾炬帴榪囩▼錛氶摼鎺ヨ繃紼嬨傜敓鎴愬彲鎵ц屼唬鐮併傞摼鎺ュ垎涓轟袱縐嶏紝涓縐嶆槸闈欐侀摼鎺ワ紝鍙﹀栦竴縐嶆槸鍔ㄦ侀摼鎺ャ備嬌鐢ㄩ潤鎬侀摼鎺ョ殑濂藉勬槸錛屼緷璧栫殑鍔ㄦ侀摼鎺ュ簱杈冨皯錛屽瑰姩鎬侀摼鎺ュ簱鐨勭増鏈涓嶄細寰堟晱鎰燂紝鍏鋒湁杈冨ソ鐨勫吋瀹規э紱緙虹偣鏄鐢熸垚鐨勭▼搴忔瘮杈冨ぇ銆備嬌鐢ㄥ姩鎬侀摼鎺ョ殑濂藉勬槸錛岀敓鎴愮殑紼嬪簭姣旇緝灝忥紝鍗犵敤杈冨皯鐨勫唴瀛樸倈cca.o-oa紼嬪簭榪愯岋細./ahello緙栬緫鏈孌礕CC緙栬瘧綆鍗曚緥瀛愮紪鍐欏備笅浠g爜錛#includestdio.h>intmain(){printf("hello,world!n");}鎵ц屾儏鍐靛備笅錛歡cc-Ehello.c-ohello.igcc-Shello.i-ohello.sgcc-chello.s-ohello.ogcchello.c-ohello./hellohello,world!
Linux涓媑cc緙栬瘧鎻愮ず閿欒銆傚湪鍑芥暟_start涓璵ain鏈瀹氫箟鐨勫紩鐢錛
浣犳槸涓嶆槸鍦ㄧ紪璇戦潤鎬佸簱鎴栬呭姩鎬佸簱錛熶篃灝辨槸娌℃湁main鍑芥暟銆
濡傛灉鏄錛屽啀鍙傝冧竴涓嬩笅杈圭殑鎻愮ず銆-c鍙傛暟琛ㄧず灝嗘簮鏂囦歡緙栬瘧鎴恛bject(鐩鏍囨枃浠)銆傚嵆gcc-cfoo.c浼氱紪璇戞垚foo.ogcc涓嶅姞鍙傛暟鏃朵細緙栬瘧涓斿皾璇曢摼鎺ユ垚鍙鎵ц屾枃浠訛紝鐒惰宖oo.c鐨勪唬鐮佷腑娌℃湁main鍑芥暟鐨勫畾涔夛紝鎵浠ユ渶緇堟棤娉曟垚鍔熼摼鎺ワ紝鏁呮姤閿欍鍦╨inux涓錛屾庝箞鐢╣cc緙栬瘧鏂囦歡錛
緙栬瘧鏂規硶錛氭牸寮廹cc甯哥敤鐨勯夐」鏈綆鍗曠殑鏄:gcchello.c榛樿ょ殑鎯呭喌涓嬪皢鐢熸垚a.out鐨勫彲鎵ц屾ф枃浠訛紝鍙闇瑕佸湪緇堢涓婅緭鍏./a.out灝卞彲浠ョ湅鍒版墽琛岀殑緇撴灉錛屽傛灉浣犳兂鎸囧畾鐢熸垚鐩鏍囨枃浠剁殑鍚嶅瓧閭d箞浣犲彲浠ュ姞涓-o閫夐」,鍛戒護濡備笅:gcc-ohellohello.c鍛戒護錛歡cc-chellohello.c
鎵╁睍璧勬枡錛
gcc鍛戒護鐨勫熀鏈鐢ㄦ硶gcc鍏朵腑錛宖ilenames涓烘枃浠跺悕錛沷ptions涓虹紪璇戦夐」銆傚綋涓嶄嬌鐢ㄤ換浣曠紪璇戦夐」緙栬瘧hello.c鏃訛紝gcc灝嗕細鑷鍔ㄧ紪璇戜駭鐢熶竴涓猘.out鐨勫彲鎵ц屾枃浠訛細#lshello.c#gcchello.c#lsa.outhello.c鎵ц岋細#./a.outHello,World!浣跨敤-o緙栬瘧閫夋嫨錛屽彲浠ヤ負緙栬瘧鍚庣殑鏂囦歡鎸囧畾涓涓鍚嶅瓧錛#lsa.outhello.c#gcchello.c-ohello#lsa.outhellohello.c鎵ц岋細#./helloHello,World!娉ㄦ剰錛氫嬌鐢-o閫夐」鏃訛紝-o鍚庨潰蹇呴』璺熶竴涓鏂囦歡鍚嶏紝鍗籌細-ooutfile銆備負浜嗕究浜庢弿榪板悗闈㈢殑閫夐」錛屽垹闄hello鍜宎.out鍙鎵ц屾枃浠躲arm-linux-gcc-3.4.5-glibc-2.3.6鏄浠涔堟剰鎬濓紵
鏄涓涓浜ゅ弶緙栬瘧杞浠躲備負浠涔堝繀欏昏佸畨瑁呭憿錛
鍥犱負鎴戜滑緙栧啓C璇璦鏄鍦ㄦ垜浠鑷宸辯殑PC涓妉inux鎿嶄綔緋葷粺涓嬪埄鐢℅CC緙栧啓鐨勶紝鑰屾垜浠鐨勫簲鐢ㄧ▼搴忔渶緇堟槸瑕佽呰澆鍒癆RM鑺鐗囦笂錛屾墍浠ヨ繖涓闂撮渶瑕佽漿鎹銆傚氨鐢ㄧ殑arm-linux-gcc鏉ョ紪璇戠敓鎴愮洰鏍囨枃浠躲
濡傛灉鍙鏄鐢╣cc鉶界劧鍦ㄤ釜浜篜C緙栬瘧姝g『錛屼絾鏄涓嬭澆鍒扮洰鏍囪姱鐗囧嵈鏄閿欒鐨勶紝鍘熷洜灝卞湪榪愯岀殑鐜澧冧笉涓鏍楓
『叄』 linux中如何用gcc編譯用vi寫的c文件
方法/步驟
1、進入linux系統,創建C文件「vim test.c」同時進入vim編輯界面也可以利用指令「touch test.c」創建後,然後「vim test.c」進入vim編輯界面。
『肆』 Linux下編譯程序,如何同時連接兩個庫文件,gcc命令應該怎麼寫。
-L後的應該是路徑,本例應該是-L/usr/lib/,-l後應該是庫的名字,注意,這里庫的名字是吧庫"libapi.so"去掉前面的"lib"和後面的".so",應該是-lapi.而且一個-L和-l對應一個庫.所以你的應該改為:
gcc -g -o test.exe test.c -L/usr/lib/ -lapi -L/usr/lib/ -lpk11.
還有,.exe文件是windows下的可執行文件格式,linux下不這么用,但是就本例而言也能運行.