• gcc用法小记


    By francis_hao    Feb 13,2017

    概要

    这里只列出了最常用的选项

     

    选项解释

    -c|-S|-E

    启动gcc编译器时,它会顺序执行预处理、编译、汇编和连接(四个阶段的详细介绍见【参考1】)。这几个选项可以指定gcc停止位置。

    -c    程序不执行连接阶段,生成.o目标文件

    -S    程序不执行汇编阶段,生成汇编格式.s的文件(编译阶段即将源文件编译成汇编格式文件)

    -E    程序不执行编译阶段,生成预处理过的源文件

    -std=standard

    指定语言标准,目前只支持c和c++。

    standard可能的取值如下

    c89

    iso9899:1990

    iso9899:199409

    c99

    c9x

    iso9899:1999

    iso9899:199x

    gnu89 (This is the default for C code)

    gnu99

    gnu9x

    其中-std=c89和-ansi在c语言中等价,-std=c++98和-ansi在c++中等价

    -g

    产生调试信息,以便GDB调试

    -pg

    生成额外的程序,用于记录程序运行的相关信息,以便为分析程序gprof使用。gprof见【参考2】。需要注意的是,你必须在编译你想生成运行信息的程序的源文件时使用该选项,同时在连接时也要使用该选项

    -Olevel

    优化等级,分别有O0、O1、O2、O3和Os五个等级。其中默认的优化等级是O0,推荐的优化等级是O2。更详细的信息见man手册

    -Wwarn...

    -Wall        打开所有的警告

    -Werror        将警告以错误来处理

    -pedantic

    对所有不符合ISO C和ISO C++标准的代码发出警告

    -Idir...

    将dir添加到搜索头文件的目录列表中,-I指定的目录优先于标准的系统头文件目录。如果dir以"="开始,"="会被sysroot前缀替换掉。see --sysroot and -isysroot

    -llibrary

    连接时搜索library库,需要注意的是,连接时会按照其出现的顺序来进行,需要注意库之间的依赖关系。搜索时实际搜索的名字是liblibrary.a

    -Ldir...

    为-l添加搜索路径

    -Dmacro[=defn]...

    有两种形式

    -Dmacro:等同于#define macro 1

    -Dmacro=defn:等同于#define macro defn

    -Umacro

    取消之前的macro的宏定义,不管是程序里的还是-D指定的

    -mmachine-option...

    -f和-m很少用到,-m可能的用法如下:

    -mcpu=cpu -mtext=text-section -mdata=data-section -mrodata=readonly-data-section

    -o outfile

    将输出文件指定为outfile,outfile可能是可执行文件、汇编文件或与处理过的源文件。如果-o没有被指定,默认输出的可执行文件为a.out,如果源文件为source.suffix,那么默认的目标文件名是source.o,汇编文件名是source.s

    @file

    从文件file中读取选项,文件种的选项以空格分隔。(几乎用不上)

    infile...

    正如其字面意思,输入文件,可以有多个

     

    共享库

    与动态共享库相关的选项如下

    -shared

    产生一个共享的库文件,使用该选项时,为产生可预测的结果,最好在产生代码时指定选项-fpic或-fPIC(在编译源文件到目标文件(.o或.so)时必须指定该选项)

    -fpic

    产生位置独立的代码(Generate position-independent code,PIC),代码通过全局的偏移表(global offset table,GOT)获取固定地址,动态加载器负责解析GOT。如果GOT的大小超过限制,在连接时会出现错误提示,此时需要使用-fPIC

    此标志被设置时, 宏 "__pic__" 和 "__PIC__" 定义成1。

    -fPIC

    类似-fpic,但是没有GOT大小的限制。

    此标志被设置时, 宏 "__pic__" 和 "__PIC__" 定义成2

     

    其他常用选项

    选项

    含义

    -print-file-name=library

    打印会在链接时使用的库文件library的全路径

    -print-search-dirs

    打印gcc安装路径和gcc会搜索库文件的路径

     

     


    本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/6395255.html

     

     

    参考

    【1】Randal E.Bryant David R.O'Hallaron著 龚奕利 雷迎春 译 《深入理解计算机系统》北京:机械工业出版社,2011

    【2】CSDN http://blog.csdn.net/stanjiang2010/article/details/5655143 Linux性能评测工具—gprog篇

    【3】迟思堂工作室 http://www.latelee.org/programming-under-linux/library-on-linux.html Linux平台静态库、动态库的一些笔记

  • 相关阅读:
    HDU 1556 Color the ball(线段树区间更新)
    BestCoder Round #90 A.Kblack loves flag(随机数生成种子)
    Codeforces Round #377 (Div. 2) D. Exams(二分答案)
    Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)
    HDU 1789 Doing Homework again(贪心)
    Codeforces Round #381 (Div. 2)D. Alyona and a tree(树+二分+dfs)
    Codeforces Round #381 (Div. 2)C. Alyona and mex(思维)
    Codeforces Round #381 (Div. 2)B. Alyona and flowers(水题)
    Codeforces Round #381 (Div. 2)A. Alyona and copybooks(dfs)
    UVA 1151 买还是建(最小生成树)
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/6395255.html
Copyright © 2020-2023  润新知