zoukankan      html  css  js  c++  java
  • G++命令

    gcc and g++分别是gnu的c & c++编译器。

    从源代码到可执行文件的四步

    gcc/g++在执行编译工作的时候,总共需要4步
    1.预处理,生成.i的文件,用到预处理器cpp。这一步称为preprocess。
    2.将预处理后的文件转换成汇编语言文件.s,用到编译器egcs。这一步称为compile。实际上编译过程就是将高级语言转化成汇编语言的过程。
    3.把汇编变为目标代码(机器代码)生成.o的文件,用到汇编器as。这一步称为assemble,实际上用到汇编器。
    4.连接目标代码,生成可执行程序,用到链接器ld。这一步称为link,把很多个.o文件拼起来。

    预处理

    -E
    只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里
    面.
    例子:

    gcc -E hello.c > pianoapan.txt   
    gcc -E hello.c | more   
    

    编译生成汇编代码

    -S
    只激活预处理和编译,就是指把文件编译成为汇编代码。
    例如gcc -S hello.c,生成.s的汇编代码。

    汇编生成目标文件

    -c
    只激活预处理、汇编、编译,生成obj文件。从源文件到可执行文件宏观上分为编译、链接两个步骤。编译针对每个.c文件进行,为每个.c文件生成.o文件。链接将很多个.o文件组合成可执行文件。例如gcc -c hello.c将生成.o的obj文件。编译和链接分离的好处在于,可以利用中间产物.o,避免每次都从头进行预处理、生成汇编代码等过程。

    链接目标文件生成库或可执行文件

    不加任何参数,默认生成可执行文件。

    依赖

    -Idir

    使用#include"file"的时候,gcc/g++会先在当前目录查找头文件。如果没有找到,它会到缺省的头文件目录找,如果使用-I指定了目录,它会先在你所指定的目录查找,然后再按常规的顺序去找。

    -include file,-i

    此参数相当于“#include”,包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include
    例子用法:

    gcc hello.c -include /root/pianopan.h   
    

    -Ldir

    编译时搜索库的路径。比如你自己的库,可以用它制定目录,不然
    编译器将只在标准库的目录找。这个dir就是目录的名称。

    -llibrary

    编译时使用的库。例如gcc -lcurses hello.c,使用ncurses库编译程序

    调试选项

    -g 只是编译器,在编译的时候,产生调试信息。
    -gstabs 此选项以stabs格式生成调试信息,但是不包括gdb调试信息.
    -gstabs+ 此选项以stabs格式生成调试信息,并且包含仅供gdb使用的额外调试信息.
    -ggdb 此选项将尽可能的生成gdb的可以使用的调试信息.
    -glevel 请求生成调试信息,同时用level指出需要多少信息,默认的level值是2

    链接选项

    -static 此选项将禁止使用动态库。
    优点:程序运行不依赖于其他库
    缺点:文件比较大

    -shared (-G) 此选项将尽量使用动态库,为默认选项
    优点:生成文件比较小
    缺点:运行时需要系统提供动态库

    -symbolic 建立共享目标文件的时候,把引用绑定到全局符号上.
    对所有无法解析的引用作出警告(除非用连接编辑选项 -Xlinker -z -Xlinker defs取代)。

    错误与警告选项

    -Wall 编译后显示所有警告。一般使用该选项,允许发出GCC能够提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。
    -pedantic 允许发出ANSI/ISO C标准所列出的所有警告
    -pedantic-errors 允许发出ANSI/ISO C标准所列出的错误
    -werror 把所有警告转换为错误,以在警告发生时中止编译过程
    -w 关闭所有警告,建议不要使用此项
    -W编译后显示编译器认为严重的警告

    预处理选项

    -Dmacro 相当于C语言中的#define macro
    -Dmacro=defn 相当于C语言中的#define macro=defn
    -Umacro 相当于C语言中的#undef macro
    -undef 取消对任何非标准宏的定义

    其他选项

    -o 指定目标名称,默认为a.out。

    例子用法

    gcc -o hello.exe hello.c
    gcc -o hello.asm -S hello.c   
    

    -O0
    -O1
    -O2
    -O3
    编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

    -fpic 编译器就生成位置无关目标码.适用于共享库(shared library).
    -fPIC 编译器就输出位置无关目标码.适用于动态连接(dynamic linking),即使分支需要大范围转移.
    -v 显示详细的编译、汇编、连接命令
    -pipe
    使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题

    gcc -pipe -o hello.exe hello.c   
        -ansi   
    

    关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,
    -fno-asm 此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。
    -fno-strict-prototype只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型
    -fthis-is-varialble就是向传统c++看齐,可以使用this当一般变量使用.
    -fcond-mismatch允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型
    -funsigned-char
    -fno-signed-char
    -fsigned-char
    -fno-unsigned-char
    这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前
    两个参数)或者 signed char(后两个参数)
    -imacros file
    将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中
    -nostdinc
    使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置
    -nostdin C++
    规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建libg++库使用
    -C 在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的
    -M 生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。
    -MM 和上面的那个一样,但是它将忽略由#include造成的依赖关系。
    -MD 和-M相同,但是输出将导入到.d的文件里面
    -MMD和-MM相同,但是输出将导入到.d的文件里面
    -Wa,option 此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序
    -Wl.option 此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.
    -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.可以使用的参数吗有下面的这些:
    c’, objective-c, c-header’, c++, cpp-output,assembler, and assembler-with-cpp.
    -x none filename
    关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型
    例子:gcc -x c hello.pig -x none hello2.c

    其它命令

    g++ --help
    ld --help
    ldd --help

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/11048768.html
Copyright © 2011-2022 走看看