標籤:編譯 gcc 彙編代碼
GCC
gcc大家都很熟悉,是個編譯器,功能強大,全稱是:GUN GCC。
平時大家都簡單的稱為:GCC, 功能強大,能夠編譯很多的語言。包括:c, c++, java, ada等…
GCC參數
gcc平時有很多參數,在平時我編譯小程式的時候,都直接gcc -o object source.c就可以了。
但是有一次我想查看我同樣目的但是不同寫法的兩個代碼是執行效率上是否有差別。所以我就查了下gcc編譯過程中的彙編代碼的參數。
| 參數 |
說明 |
| -c |
只編譯不連結,產生*.o檔案 |
| -S |
產生彙編代碼*.s檔案 |
| -E |
先行編譯 產生*.i檔案 |
| -g |
在可執行程式裡包含了調試資訊,可用 gdb 調試 |
| -o |
把輸出檔案輸出到指定檔案裡 |
| -static |
連結靜態連結庫 |
| -library |
連結名為library的連結庫 |
舉例
使用方法比較簡單:
gcc -E hello.c -o hello.i
這樣我們就得到了一個先行編譯的檔案。
裡面是一些:
# 1 "main.cpp"# 1 "<built-in>" 1# 1 "<built-in>" 3# 175 "<built-in>" 3# 1 "<command line>" 1# 1 "<built-in>" 2# 1 "main.cpp" 2# 1 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream" 1 3# 37 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream" 3# 1 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 1 3# 16 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3# 226 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3typedef __char16_t char16_t;typedef __char32_t char32_t;# 349 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config" 3...
如這樣的東西,就是把一些標頭檔放到裡面神馬的。
gcc -S hello.i -o hello.s
裡面就是彙編代碼了。如下:
.section __TEXT,__text,regular,pure_instructions .section __TEXT,__const .align 4LCPI0_0: .long 1127219200 ## 0x43300000 .long 1160773632 ## 0x45300000 .long 0 ## 0x0 .long 0 ## 0x0LCPI0_1: .quad 4841369599423283200 ## double 4.503600e+15 .quad 4985484787499139072 ## double 1.934281e+25 .section __TEXT,__text,regular,pure_instructions .globl _main .align 4, 0x90_main: ## @main .cfi_startproc## BB#0: pushq %rbpLtmp2: .cfi_def_cfa_offset 16Ltmp3: .cfi_offset %rbp, -16 movq %rsp, %rbp...
原諒我對彙編比較白癡,我只能看懂很少一點點彙編代碼,想學都拖了好久了 TT
gcc -c hello.s -o hello.o
這個時候已經沒辦法用文字編輯器開啟查看了。已經是二進位檔案了。開啟也都是0 1了
我用sublime text 2 開啟後是一堆16進位的代碼了。
gcc hello.o -o hello
這個時候,連結成功,編譯為可執行檔了。
執行的時候只用./hello就可以了。
C/C++學習 - gcc編譯過程查看彙編代碼