• part1:13-linux编译器GCC


    Gcc特点

    Gcc基本用法

    1、gcc的概念

    GCC(GNU Compiler Collection,GNU编译器套装),是一款由GNU开发的编程语言编译器。GCC原名为GNU C 语言编译器,因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、java,以及Ada与其他语言。

    2、GCC的执行过程

    使用GCC,把C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理(也称为预编译,Preprocessing)、编译(compilation)、汇编(assembly)、和链接(linking)。

    命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件当所有的目标文件都生成以后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时该程序所调用的库函数也从各自所在的库中连到合适的地方。以上这些过程是gcc内部实现的机制,实际使用中,上述过程可以通过gcc的选项实现。

    gcc命令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件] eg:gcc hello.c -o hello;本过程实际上将预处理、编译、汇编、链接一步完成。下面分别介绍每个流程

    执行预处理工作:gcc -E hello.c -o hello.i  生成hello.i

    执行编译处理工作:gcc -S hello.i -o hello.s生成汇编文件hello.s

    执行编译工作:gcc -c hello.s -o hello.o  对hello.s进行汇编,生成目标文件hello.o

    执行链接工作:gcc hello.o -o hello

    编译选项

    使用-g选项,在可执行程序中包含标准调试信息。使用命令gcc -g hello.c -o hello2生成包含调试信息的文件hello2,带有调试信息的可执行文件可以使用gdb调试器进行调试。

    使用-D选项,在编译时进行宏定义。使用命令gcc -DLINUX hello.c -o hello3生成了宏LINUX的可执行文件hello3。

    使用-O2选项,完成程序的优化工作

    time ./hello 测试hello可执行文件的执行时间。

    -Wall:生成所有的警告信息

    -w:不生成任何警告信息

    -DMACRO:使用-D定义MACRO宏,等效于在程序中使用#define MACRO

    每一个编译器都有标准的寻找头文件的路径!!!!gcc会在/usr/include/下面去找

    -I dirname:将dirname所指出的目录作为编译器寻找头文件的标准路径。对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;而对于"",gcc在当前目录中搜寻头文件。-I作用是告诉gcc,如果在当前目录未找到需要的头文件,就到指定的dirname目录中去寻找:eg:gcc foo.c -I /home/include -o foo

    -static 将产生一个和static库一道链接的可执行文件。当没有开启-static选项时,链接器首先试着用共享库,假如共享版本不可用,然后再试着用静态库。

    -shared 告诉gcc产生一个共享库,该共享库能在链接时和其他的共享文件一起形成可执行文件,该共享库也能在运行时装载进可执行文件的地址空间,使用-shared是创建一个共享ELF库的首选方法。

  • 相关阅读:
    spring MVC fromeWork 與webwork2 mvc 比較
    JAVA Oauth 认证服务器的搭建
    HTTPS的工作原理
    理解HTTP幂等性
    支付交易一般性准则
    设计模式六大原则
    腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
    Valid Parentheses
    4Sum
    Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5501366.html
Copyright © 2020-2023  润新知