GCC

原创 2015年04月08日 00:45:08

先编写一段程序,以hello.c存储


最一般的gcc用法如下

$ gcc hello.c -o hello

$ ./hello

如果我们分布执行,输入命令

预处理

gcc -E hello.c -o hello.i

预处理的结果是进行宏替换,将include的头文件全部拷贝到该文件中。所以自己写的程序应该位于新生成的文件末尾

.....................
extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;


extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
# 943 "/usr/include/stdio.h" 3 4

# 2 "hello.c" 2
int main(){
 printf("hello,world!");
 return 0;
}



编译

gcc –S hello.i –o hello.s

编译后的结果如下

        .file   "hello.c"
        .section        .rodata     ;;表示程序分段,下面属于只读数据段                                 
.LC0:
        .string "hello,world!"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        subl    $16, %esp
        movl    $.LC0, (%esp)
        call    printf
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
        .section        .note.GNU-stack,"",@progbits


汇编

gcc –c hello.c –o hello.o

链接

ld –static crt1.o crti.o crtbeginT.ohello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o 

(注意省略了文件路径名)


其中,以.开头的语句不会被翻译成机器语言,他们是给汇编器的指示。(//后面的注释是手工添加的)

上述所输出的可执行文件,和.o文件,都属于ELF文件。推荐使用readelf(linux自带)进行分析。

objdump(linux自带)也可以,而且可以进行反汇编。



相关文章推荐

compiler-gcc5.h

  • 2017年11月01日 17:23
  • 2KB
  • 下载

gcc 编译动态库和静态库

http://blog.csdn.net/ubuntu64fan/article/details/7684800 Linux C 编程入门之一:gcc 编译动态库和静态库 ...
  • zxygww
  • zxygww
  • 2015年11月13日 17:38
  • 479

gcc-4.8.5.tar.gz

  • 2017年10月27日 15:08
  • 105.83MB
  • 下载

windows版本的tdm-gcc

  • 2017年11月20日 15:04
  • 34.63MB
  • 下载

如何在虚拟机中linux系统用gcc编译并运行第一个C++程序

首先打开Terminal,一般系统都已安装了gcc,如果未安装就在命令行输入#apt-get install gcc命令,接着输入Y,系统就会自己系统下载gcc哦 输入命令 mkdir my_c...

arm-linux-gcc-4.4.3.tar.gz

  • 2017年10月27日 21:06
  • 46.59MB
  • 下载

gcc编译时对'xxxx'未定义的引用问题

在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行文件的时候会出现找不到’xxx’的定义的情况。 例如: g++ -o spid...

gcc编译数据库1

  • 2017年01月07日 17:49
  • 133B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GCC
举报原因:
原因补充:

(最多只允许输入30个字)