首先說一下gcc和g++分別是gnu的c和c++編譯器,而且它們在進行編譯的時候,一般需要分為四步:
①預處理,對於cpp會生成.i檔案,使用預處理器cpp
②將預處理後的檔案不轉換為組合語言,生成.s檔案,使用編譯器egcs
③將彙編檔案變成目標檔案,也就是生成機器碼,這裡就是生成.o檔案,使用彙編器as
④連線目標**,生成可執行程式,使用聯結器ld
其中主要引數為:
-x language filename它是設定檔案使用的語言,此時字尾名是無效的,雖然我們約定c語言的字尾是.c,c++語言的字尾名是.cpp,但是此時我們可以隨意使用字尾名。通常可用的引數有:c、objective-c、c-header、c++、cpp-output、assembler、assembler-with-cpp。比如我們可以使用命令cpp -x c hello.xin
-x none filename 它是關閉上乙個選項,讓gcc根據檔名的字尾自動判斷檔案型別,比如gcc -x c hello.xin -x none hi.c
-c是只啟用預處理、編譯和彙編,也就是它只把程式做成obj檔案,我們可以使用gcc -c hello.c會生成.o的obj檔案
-s只啟用預處理和編譯,能夠把檔案編譯成為彙編**,比如我們gcc -s hello.c會生成.s的彙編**,我們可以使用文字編輯器檢視。
-e 只啟用預處理,這個不生成檔案,我們需要把它重定向到乙個輸出檔案裡面,比如gcc -e hello.c > xin.txt或者gcc -e hello.c |more來檢視。
-o指定目標名稱,預設gcc編譯出來的檔案是a.out,我們可以使用gcc -o hello hello.c的方式。
-pipe使用管道代替編譯中的臨時檔案,使用非gnu彙編工具的時候可能會有問問題。
-undef取消對任何非標準巨集的定義
-idir 在我們使用#include的時候,gcc會先在當前目錄查詢我們所制定的標頭檔案,如果沒有找到,它會到預設的頭目錄檔案去找,如果使用-i指定了目錄,他會先在我們指定的目錄查詢,然後到常規的目錄去找。
-i-是取消前乙個引數的功能,一般在-idir之後使用。
-c在預處理的時候,不刪除注釋資訊,一般和-e使用,在分析程式的時候很方便
-m生成檔案關聯的資訊,包含目標檔案所依賴的所有源**,我們可以用gcc -m hello.c來測試
-mm和-m一樣,但是他忽略由#include 造成的依賴關係
-md和-m相同,但是將輸出匯入到.d的檔案裡面
-mmd和-mm相同,把輸出匯入到.d的檔案裡面
-library是指定編譯時使用的庫。
-ldir指定編譯時,搜尋庫的路徑,其中dir是我們的目錄的名稱。
-o0、-o1、-o2、-o3是編譯器的優化選項的四個級別,其中-o0表示沒有優化,-o1為預設值,而-o3的優化級別最高
-g只是編譯器,在編譯的時候,產生除錯資訊
-gstabs它以stabs格式產生除錯資訊,但是不包含gdb除錯資訊
-ggdb會產生gdb的除錯資訊
-static會禁止使用動態庫,因此編譯出來的東西一般都很大
-share會盡量使用動態庫,所以生成檔案很小,但是需要使用動態庫
-traditional師徒讓編譯器支援傳統c語言特性
辛星整理Linux下的 var目錄
首先說一下 var目錄吧,它一般儲存系統執行時需要改變的資料,一般每個系統都是指定的,下面是一些常見的子目錄的說明 1 var lib 系統正常執行時需要改變的檔案。2 var local 它儲存安裝的程式的可變資料,通常是系統管理員安裝的程式 3 var lock 它儲存的是鎖定檔案,許多程式有這...
辛星整理網域名稱下的cookie問題
對於非頂級網域名稱,比如二級網域名稱或者 網域名稱,設定的cookie的domain只能為頂級網域名稱或者二級網域名稱或者 網域名稱,不能設定成其他的二級網域名稱,否則cookie無法生成。而對於xinxingjiaocheng.com也只能設定其domain為xinxingjiaocheng.co...
辛星簡述ul和li的常用樣式
我們可以對ul使用list style none來取消列表前面的圓點。而margin 0px則通常用來刪除ul的縮排。而list style type是用來定義li列表的專案符號的,即列表前面的修飾,它是乙個可繼承屬性。而list style image則是用來代替專案符號,它是乙個可繼承屬性。而l...