gcc常用引數,備忘

2021-08-30 01:48:12 字數 2061 閱讀 7202

1. 標頭檔案

象conio.h應該變成curses.h

2. 沒有itoa函式

itoa?不對吧,標準c/c++裡根本沒有這個函式。即使在windows平台下某些編譯器提供了該函式[3],沒有任何移植性不說,還只能解決int型別(也許其他函式還可以解決long、unsigned long等型別),浮點型別又怎麼辦?當然,辦法還是有,那就是:sprintf。

char s[100];

sprintf(s, "%f", 123.123456);

3. 關於sqrt,sin和cos函式

就算是引入math.h標頭檔案,也不會找到sqrt,sin和cos函式。應該用鏈結庫來解決。

有時候我們使用了某個函式,但是我們不知道庫的名字,這個時候怎麼辦呢?很抱歉,對於這個問題我也不知道答案,我只有乙個傻辦法.首先, 我到標準庫路徑下面去找看看有沒有和我用的函式相關的庫,我就這樣找到了執行緒(thread)函式的庫檔案(libpthread.a). 當然,如果找不到,只有乙個笨方法.比如我要找sin這個函式所在的庫. 就只好用 nm -o /lib/*.so|grep sin>~/sin 命令,然後看~/sin檔案,到那裡面去找了. 在sin檔案當中,我會找到這樣的一行libm-2.1.2.so:00009fa0 w sin 這樣我就知道了sin在 libm-2.1.2.so庫裡面,我用 -lm選項就可以了(去掉前面的lib和後面的版本標誌,就剩下m了所以是 -lm).

4. makefile出現missing separator的錯誤

原因是目標宣告行下面的命令列必須用tab鍵分開(而不是空格)

pg: pg.o

[ tab鍵 ]gcc -o pg -o -o2 -lm /lib/ld-2.2.93.so pg.o

pg.o: pg.c pointgroup.h

[ tab鍵 ]gcc -c -o -o2 pg.c

clean:

[ tab鍵 ]rm -f *.o

5. 注意檔案的dos格式字元

除錯的時候應該注意檔案可能有dos格式字元,必須先用如下命令去掉檔案中的dos格式字元:

tr -d tmp_file

mv tmp_file

-o file 

指定輸出檔名,在編譯為目標**時,這一選項不是必須的。如果file沒有指定,預設檔名是a.out.

-c 只編譯不鏈結

-dfoo=bar 

在命令列定義預處理巨集foo,其值為bar

-idirname 

將dirname加入到頭檔案的搜尋目錄列表中

-ldirname 

將dirname加入到庫檔案的搜尋目錄列表中,預設情況下gcc 只鏈結共享庫

-static 

鏈結靜態庫,即執行靜態鏈結

-lfoo 

鏈結名為libfoo的函式庫

-g 在可執行程式中包含標準除錯資訊

-ggdb 

在可執行程式中包含只有gnu debugger才能使別的達兩條是資訊

-o 優化編譯過的**

-on 

指定**優化的級別為n,o<=n<=3

-ansi 

支援ansi/iso c的標準語法,取消gnu的語法擴充套件中與該標準有衝突的部分 

(但這一選項並不能保證生成ansi相容的**)

-pedantic 

允許發出ansi/iso c標準所列出的所有警告

-pedantic -errors 

允許發出ansi/iso c標準所列出的所有錯誤

-traditional 

支援kernighan & ritchie c語法(如用舊式語法定義函式);如果不知道這個選項的含義,也沒有關係

-w  

關閉所有警告,建議不要使用此項

.wall 

允許發出gcc能提供的所有有用的警告,也可以用-w(warning)來標記指定的警告

-werror 

把所有警告轉換為錯誤,以在警告發生時中止編譯過程                              

-mm 

輸出乙個make相容的相關列表

-v 顯示在編譯過程的每一步中用到的命令

gcc常用引數

gcc的一些重要引數 1.i 指定標頭檔案搜尋路徑 i 表include 如 gcc c hello.c o hello.o i usr include 2.l 指定要連線的庫所在的目錄 l 指定要連線的庫的名字 如 gcc main.o l usr lib lqt o hello 3.d 定義巨集...

gcc常用引數

今晚看了些有關gcc的編譯選項的內容,記錄下來以備查用。1 gcc c 只編譯不鏈結,生成.o檔案。例如,gcc c hello.c,將由hello.c得到hello.o 2 gcc o直接得到可執行檔案,並且可以指定可執行檔的名稱。例如,gcc o hello hello.c,將由hello.c得...

gcc常用引數

o file 指定輸出檔名,在編譯為目標 時,這一選項不是必須的。如果file沒有指定,預設檔名是a.out.c 只編譯不鏈結 dfoo bar 在命令列定義預處理巨集foo,其值為bar idirname 將dirname加入到頭檔案的搜尋目錄列表中 ldirname 將dirname加入到庫檔案...