linux编译c 优化,Linux编译选项
Linux平臺都通過CC調用它們的C編譯程序.除標準和CC以外,LINUX和FREEBSD還支持gcc.
基本的編譯命令選項有以下幾種:
1. -c ? ?(compile)
編譯產生對象文件(*.obj)/目標文件,而不鏈接成可執行文件,當編譯幾個獨立的模塊,而待以后由鏈接程序把它們鏈接在一起時,就可以使用這個選項,如:
$cc -c hello.c ===> hello.o
$cc hello.o
上面的cc表示選用的編譯器,如gcc,g++等。
2. -o ? ?允許用戶指定輸出文件名,output?如
$cc hello.c -o hello.o
or
$cc hello.c -o hello
3. -g ? ?指明編譯程序在編譯的輸出中應產生調試信息.
這個調試信息使源代碼和變量名引用在調試程序中或者當程序異常退出后在分析core文件時可被使用.
4. -D ? 允許從編譯程序命令行定義宏符號。一共有兩種情況:
一種是用-DMACRO,相當于在程序中使用#define MACRO
另一種是用-DMACRO=A,相當于程序中的#define MACRO A.如對下面這代碼:
#ifdefine DEBUG
printf("debug messagen");
#endif
編譯時可加上-DDEBUG參數,執行程序則打印出編譯信息
5. -I ? 可指定查找include文件的其他位置.
例如,如果有些include文件位于比較特殊的地方,比如/usr/local/include,就可以增加此選項如下:
$cc -c -I/usr/local/include -I/opt/include hello.c 此時目錄搜索會按給出的次序進行.
6. -E ? 這個選項是相對標準的,它允許修改命令行以使編譯程序把預先處理的C文件發到標準輸出,而不實際編譯代碼.
在查看C預處理偽指令和C宏時,這是很有用的.可能的編譯輸出可重新定向到一個文件,然后用編輯程序來分析:
$cc -c -E hello.c >cpp.out ? ? ? 此命令使include文件和程序被預先處理并重定向到文件cpp.out.
以后可以用編輯程序或者分頁命令分析這個文件,并確定最終的C語言代碼看起來如何.
7. -O? 優化選項, 這個選項不是標準的
-O和-O1指定1級優化
-O2 指定2級優化
-O3 指定3級優化
-O0 指定不優化
$cc -c O3 -O0 hello.c ?當出現多個優化時,以最后一個為準!!
8. -Wall ?以最高級別使用GNU編譯程序,專門用于顯示警告用!!
$gcc -Wall hello.c
9. -L ?指定連接庫的搜索目錄,-l(小寫L)指定連接庫的名字
$gcc main.o -L/usr/lib -lqt -o hello
上面的命令把目標文件main.o與庫qt相連接,連接時會到/usr/lib查找這個庫文件.也就是說-L與-l一般要成對出現.
10. -P 僅進行編譯預處理
---- 在命令行中加上-P選項可以使cc僅完成對.c文件的預處理工作,而后面的編譯,匯編,優化,鏈接則都不做。例如:
$gcc -P my.c ?此時編譯系統將在當前目錄下生成一個名為my.i的文件。這個文件中包含有對my.c中的偽指令進行處理后的代碼及my.c中
原有的代碼。在某些情況下,.i文件可能對于程序排錯有一定的用處。
11. -S 僅生成匯編語言代碼
---- 在cc命令行中加上-S選項,可以使cc只調用預處理程序和編譯程序以生成與源程序相應的匯編代碼。
與每一個c源文件相應的匯編程序被放到相應的.s文件中。例如:
$ gcc -S ?myprog.c myfunc.c
$ ls *.s
myprog.s ? myfunc.s
補充:
1)把待執行的程序送入內存,稱為裝入程序。
2)把待執行的程序與程序庫及其它已編譯好的程序連接起來,所用的準備程序稱為鏈接程序。
如果多個邏輯CPU的“physical id”和“core id”均相同,說明開啟了超線程(Hyper Threading)。
總結
以上是生活随笔為你收集整理的linux编译c 优化,Linux编译选项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java线程interu_Intel 1
- 下一篇: 如何把通达信公式变成python_通达信