设为首页 加入收藏

TOP

C/C++学习 - gcc编译过程查看汇编代码
2015-07-24 05:00:54 来源: 作者: 【 】 浏览:4
Tags:C/C 学习 gcc 编译 过程 查看 汇编 代码

GCC 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 "
   
    " 1 # 1 "
    
     " 3 # 175 "
     
      " 3 # 1 "
      ? " 1 # 1 "
      
       " 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" 3 typedef __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  4
LCPI0_0:
    .long   1127219200              ## 0x43300000
    .long   1160773632              ## 0x45300000
    .long   0                       ## 0x0
    .long   0                       ## 0x0
LCPI0_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   %rbp
Ltmp2:
    .cfi_def_cfa_offset 16
Ltmp3:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp

...

原谅我对汇编比较白痴,我只能看懂很少一点点汇编代码,想学都拖了好久了 TT

然后进行编译,不链接生成 .o文件。
gcc -c hello.s -o hello.o

这个时候已经没办法用文本编辑器打开查看了。已经是二进制文件了。打开也都是0 1
我用sublime text 2 打开后是一堆16进制的代码了。

然后生成可执行文件:
gcc hello.o -o hello

这个时候,链接成功,编译为可执行文件了。

执行的时候只用./hello就可以了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇leetcode―Validate Binary Sear.. 下一篇POJ_2503_Babelfish(map or 字典..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: