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加入到庫檔案...