[c/c++]GCC使用及其常用的选项的介绍

GCC使用及其常用的选项的介绍


       GCC简介:(翻译官/翻译组织)

       GNU编译器套件(GNU Compiler Collection)包括CC++Objective-CFortranJavaAdaGo语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
      

      gcc所遵循的部分约定规则:

.c为后缀的文件,C语言 源代码文件;
.a为后缀的文件,是由 目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过 预处理
.h为后缀的文件,是程序所包含的 头文件
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件,是Objective-C++ 源代码文件;
.o为后缀的文件,是 编译后的 目标文件
.s为后缀的文件,是 汇编语言源代码文件;
.S为后缀的文件,是经过 预编译的汇编语言源代码文件。
       

      在linux 的 shell/bash 中 检查是否有安装gcc ,

  1. gcc -v

         假如输出版本号 则已经安装
GCC对于文件的后缀名 要求很高,对于不同的后缀,执行的gcc的命令大略不同 

      譬如c语言的编译

  1. #include

    int main(){

      printf("this is c\n");

      return 0;

    }

 gcc编译  


  1. gcc -o build 001.c 

     则会生产文件夹 build   (gcc -o 输出文件) output


gcc 执行则需要执行


  1. ./build

      那么则输出了 this is c

在调试中,常用 可以看出编译的具体过程

  1. gcc -v -o build  001.c 


  1. Apple LLVM version 7.0.0 (clang-700.1.76)

    Target: x86_64-apple-darwin14.5.0

    Thread model: posix

     "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.11.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name 001.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 253.6 -v -dwarf-column-info -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -fdebug-compilation-dir /Users/mac -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.11.0 -fencode-extended-block-signature -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o -x c 001.c

    clang -cc1 version 7.0.0 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0

    ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/local/include"

    ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/Library/Frameworks"

    #include "..." search starts here:

    #include <...> search starts here:

     /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/include

     /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include

     /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include

     /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)

    End of search list.

     "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.11.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -o build /var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/lib/darwin/libclang_rt.osx.a

        预处理:
cpp -o a.i 001.c
编译:gcc -S    [cc1 -o a.s 001.c]
/var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o -x c 001.c  
汇编 : gcc -c
as -o a.o a.s
链接:gcc -o  [gcc -o build 001.c]
-o build a.o.....

举例子: 

--编译

  1. gcc -S -o a.s 001.c

    
 生成了a.s 文件 
  1. .cfi_offset %rbp, -16

            movq    %rsp, %rbp

    Ltmp2:

            .cfi_def_cfa_register %rbp

            subq    $16, %rsp

            leaq    L_.str(%rip), %rdi

            movl    $0, -4(%rbp)

            movb    $0, %al

            callq   _printf

            xorl    %ecx, %ecx

            movl    %eax, -8(%rbp)          ## 4-byte Spill

            movl    %ecx, %eax

            addq    $16, %rsp

            popq    %rbp

            retq

            .cfi_endproc


            .section        __TEXT,__cstring,cstring_literals

    L_.str:                                 ## @.str

            .asciz  "xxx\n"



    .subsections_via_symbols


      --汇编 : gcc -c

  1. gcc -c -o a.o a.s


生成了 a.o 文件 [二进制文件]

^@^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^@^B^@^@^D^@^@^@°^B^@^@^B^@^@^@^@^D^@<80>^@^@^@^@^@^@^@^@^@^@^@^@__cstring^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^@^E^@^@^@^@^@^@^@J^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__compact_unwind__LD^@^@^@^@^@^@^@^@^@^@^@^@0^@^@^@^@^@^@^@^@^@^@^@^@^@^@P^B^@^@^C^@^@^@À^B^@^@^A^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@__eh_frame^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@P^@^@^@^@^@^@^@@^@^@^@^@^@^@^@p^B^@^@^C^@^@^@^@^@^@^@^@^@^@^@^K^@^@h^@^@^@^@^@^@^@^@^@^@^@^@$^@^@^@^P^@^@^@^@^K

^@^@^@^@^@^B^@^@^@^X^@^@^@È^B^@^@^B^@^@^@è^B^@^@^P^@^@^@^K^@^@^@P^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^A^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@UH<89>åH<83>ì^PH<8d>=^[^@^@^@ÇEü^@^@^@^@°^@è^@^@^@^@<89><89>ÈH<83>Ä^P]Ãxxx

^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^T^@^@^@^@^@^@^@^CzR^@^Ax^P^A^P^L^G^H<90>^A^@^@$^@^@^@^\^@^@^@<90>ÿÿÿÿÿÿÿ*^@^@^@^@^@^@^@^@A^N^P<86>^BC^M^F^@^@^@^@^@^@^@^Y^@^@^@^A^@^@-^K^@^@


预处理编译  --条件预处理

#include

#define ABC

int main(){

 #ifdef ABC

    printf("%s,%s,%dxxx\n",__FUNCTION__,__FILE__,__LINE__);

 #endif

    printf("hhh");

   return 0;

}

编译 gcc -o build  001.c

或者没有可以通过 gcc -DABC -o build 001.c 控制变量编译的开关 相当于  #define ABC 




gcc -c -o a.o a.s

你可能感兴趣的:(C/C++)