導航:首頁 > 程序命令 > gcc查看命令

gcc查看命令

發布時間:2024-08-24 14:04:26

『壹』 gcc命令未找到 怎麼辦

先找到你系統裡面有沒有gcc命令:
輸入which gcc,正常會輸出:/usr/bin/gcc,這個就是你gcc 程序所在位置

不嫌繁索的話,就直接輸入 /usr/bin/gcc 來運行gcc

經常要調用的話,加入PATH路徑中,可以直接調用GCC,使用如下命令:PATH=/usr/bin:$PATH

『貳』 linux GCC常用命令詳解

Linux GCC常用命令詳解

1. 簡介

GCC 的意思也只是 GNU C Compiler 而已。經過了這么多年的發展,GCC 已經不僅僅能支持 C 語言;它現在還支持 Ada 語言、C++ 語言、Java 語言、Objective C 語言、Pascal 語言、COBOL語言,以及支持函數式編程和邏輯編程的 Mercury 語言,等等。而 GCC 也不再單只是 GNU C 語言編譯器的意思了,而是變成了 GNU Compiler Collection 也即是 GNU 編譯器家族的意思了。另一方面,說到 GCC 對於操作系統平台及硬體平台支持,概括起來就是一句話:無所不在。

2. 簡單編譯

示常式序如下:

//test.c #include int main(void) { printf("Hello World! "); return 0; }

這個程序,一步到位的編譯指令是:

gcc test.c -o test

實質上,上述編譯過程是分為四個階段進行的,即預處理(也稱預編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly)和連接(Linking)。

2.1 預處理

gcc -E test.c -o test.i 或 gcc -E test.c

可以輸出test.i文件中存放著test.c經預處理之後的代碼。打開test.i文件,看一看,就明白了。後面那條指令,是直接在命令行窗口中輸出預處理後的代碼。

gcc的-E選項,可以讓編譯器在預處理後停止,並輸出預處理結果。在本例中,預處理結果就是將stdio.h 文件中的內容插入到test.c中了。

2.2 編譯為匯編代碼(Compilation)

預處理之後,可直接對生成的test.i文件編譯,生成匯編代碼:

gcc -S test.i -o test.s

gcc的-S選項,表示在程序編譯期間,在生成匯編代碼後,停止,-o輸出匯編代碼文件。

2.3 匯編(Assembly)

對於上一小節中生成的匯編代碼文件test.s,gas匯編器負責將其編譯為目標文件,如下:

gcc -c test.s -o test.o

2.4 連接(Linking)

gcc連接器是gas提供的,負責將程序的目標文件與所需的所有附加的目標文件連接起來,最終生成可執行文件。附加的目標文件包括靜態連接庫和動態連接庫。

對於上一小節中生成的test.o,將其與C標准輸入輸出庫進行連接,最終生成程序test

gcc test.o -o test

在命令行窗口中,執行./test, 讓它說HelloWorld吧!

3. 多個程序文件的編譯

通常整個程序是由多個源文件組成的,相應地也就形成了多個編譯單元,使用GCC能夠很好地管理這些編譯單元。假設有一個由test1.c和 test2.c兩個源文件組成的程序,為了對它們進行編譯,並最終生成可執行程序test,可以使用下面這條命令:

gcc test1.c test2.c -o test

如果同時處理的文件不止一個,GCC仍然會按照預處理、編譯和鏈接的過程依次進行。如果深究起來,上面這條命令大致相當於依次執行如下三條命令:

gcc -c test1.c -o test1.o gcc -c test2.c -o test2.o gcc test1.o test2.o -o test

4. 檢錯

gcc -pedantic illcode.c -o illcode

-pedantic編譯選項並不能保證被編譯程序與ANSI/ISO C標準的完全兼容,它僅僅只能用來幫助Linux程序員離這個目標越來越近。或者換句話說,-pedantic選項能夠幫助程序員發現一些不符合 ANSI/ISO C標準的代碼,但不是全部,事實上只有ANSI/ISO C語言標准中要求進行編譯器診斷的那些情況,才有可能被GCC發現並提出警告。

除了-pedantic之外,GCC還有一些其它編譯選項也能夠產生有用的警告信息。這些選項大多以-W開頭,其中最有價值的當數-Wall了,使用它能夠使GCC產生盡可能多的警告信息。

gcc -Wall illcode.c -o illcode

GCC給出的警告信息雖然從嚴格意義上說不能算作錯誤,但卻很可能成為錯誤的棲身之所。一個優秀的Linux程序員應該盡量避免產生警告信息,使自己的代碼始終保持標准、健壯的特性。所以將警告信息當成編碼錯誤來對待,是一種值得贊揚的行為!所以,在編譯程序時帶上-Werror選項,那麼GCC會在所有產生警告的地方停止編譯,迫使程序員對自己的代碼進行修改,如下:

gcc -Werror test.c -o test

5. 庫文件連接

開發軟體時,完全不使用第三方函數庫的情況是比較少見的,通常來講都需要藉助許多函數庫的支持才能夠完成相應的功能。從程序員的角度看,函數庫實際上就是一些頭文件(.h)和庫文件(so、或lib、dll)的集合。。雖然Linux下的大多數函數都默認將頭文件放到/usr/include/目錄下,而庫文件則放到/usr/lib/目錄下;Windows所使用的庫文件主要放在Visual Stido的目錄下的include和lib,以及系統文件夾下。但也有的時候,我們要用的庫不再這些目錄下,所以GCC在編譯時必須用自己的辦法來查找所需要的頭文件和庫文件。

例如我們的程序test.c是在linux上使用c連接mysql,這個時候我們需要去mysql官網下載MySQL Connectors的C庫,下載下來解壓之後,有一個include文件夾,裡麵包含mysql connectors的頭文件,還有一個lib文件夾,裡麵包含二進制so文件libmysqlclient.so

其中inclulde文件夾的路徑是 /usr/dev/mysql/include ,lib文件夾是 /usr/dev/mysql/lib

5.1 編譯成可執行文件

首先我們要進行編譯test.c為目標文件,這個時候需要執行

gcc –c –I /usr/dev/mysql/include test.c –o test.o

5.2 鏈接

最後我們把所有目標文件鏈接成可執行文件:

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

Linux下的庫文件分為兩大類分別是動態鏈接庫(通常以.so結尾)和靜態鏈接庫(通常以.a結尾),二者的區別僅在於程序執行時所需的代碼是在運行時動態載入的,還是在編譯時靜態載入的。

5.3 強制鏈接時使用靜態鏈接庫

默認情況下, GCC在鏈接時優先使用動態鏈接庫,只有當動態鏈接庫不存在時才考慮使用靜態鏈接庫,如果需要的話可以在編譯時加上-static選項,強制使用靜態鏈接庫。

在/usr/dev/mysql/lib目錄下有鏈接時所需要的庫文件libmysqlclient.so和libmysqlclient.a,為了讓GCC在鏈接時只用到靜態鏈接庫,可以使用下面的命令:

gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

靜態庫鏈接時搜索路徑順序:

1. ld會去找GCC命令中的參數-L

2. 再找gcc的環境變數LIBRARY_PATH

3. 再找內定目錄 /lib /usr/lib /usr/local/lib 這是當初compile gcc時寫在程序內的

動態鏈接時、執行時搜索路徑順序:

1. 編譯目標代碼時指定的動態庫搜索路徑

2. 環境變數LD_LIBRARY_PATH指定的動態庫搜索路徑

3. 配置文件/etc/ld.so.conf中指定的動態庫搜索路徑

4. 默認的動態庫搜索路徑/lib

5. 默認的動態庫搜索路徑/usr/lib

有關環境變數:

LIBRARY_PATH環境變數:指定程序靜態鏈接庫文件搜索路徑

LD_LIBRARY_PATH環境變數:指定程序動態鏈接庫文件搜索路徑

『叄』 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『錛屼絾鏄涓嬭澆鍒扮洰鏍囪姱鐗囧嵈鏄閿欒鐨勶紝鍘熷洜灝卞湪榪愯岀殑鐜澧冧笉涓鏍楓

閱讀全文

與gcc查看命令相關的資料

熱點內容
游戲aoi演算法 瀏覽:842
phpmysqlint 瀏覽:910
怎麼從appstore商城買東西 瀏覽:182
大秀直播平台源碼 瀏覽:418
java視屏 瀏覽:932
電腦中如何給程序加密 瀏覽:238
java排序容器 瀏覽:942
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:496
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:882
盈通伺服器ip地址 瀏覽:789
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:813
新氧app都在哪個城市 瀏覽:731
十二大加密貨幣圖片 瀏覽:315
資料庫日誌自動壓縮 瀏覽:929
手機表格文檔用哪個app 瀏覽:77
找人開發app的公司怎麼樣 瀏覽:652