gcc常用选项小解

    技术2022-05-13  20

     gcc有一百多个选项,并支持多个选项同时使用,只要他们不冲突即可,简单介绍一下常用的选项。

    指定函数库和包含文件的查找路径。

    如果你需要链接的库不是标准库,可以使用-L选项:gcc  -L/home/morris/lib -o ipmsg .

    如果你需要的是某一个确定的库文件,要用-l选项:gcc  -L/home/morris/lib/lib.so -o ipmsg 。

    如果你要找的不是标准的头文件 ,可以用选项-I选项:gcc -I/home/morris/include -o ipmsg.

    编译时,gcc首先会从上面两个文件中查找所需要的文件。

    在默认的情况下gcc只链接动态共享库,如果需要静态库,则需要-static选项:gcc  -L/home/morris/lib -o ipmsg -static.

    2.l出错检查及警告

    选项 -pedantic表示gcc只发出ANSI/ISO c标准所列出的所有警告,与-errors相近,但-errors针对的是错误。

    选项 -ansi支持ANSI/ISO c 标准语法,取消GNU的语法中与标准有冲突的部分,但该选项不能保证生成ANSI兼容的代码。

    -werror : 把所有的警告转换为错误,以在警告发生时中止编译过程。

    -w:关闭所有警告(不建议使用)。

    -W:允许发相互gcc能提供的所有有用 的警告,也可以用-W{warning}来标记指定的警告。

    -v :显示在编译过程中每一步用到的命令。

    3.优化选项

    gcc的命令行选项中的代码优化选项可以该井程序的效率,但代价需要更长的编译时间和在编译时需要更多的内存。——O和-O1等价,告诉gcc对代码长度和执行时间进行优化。在这个级别上执行的优化类型取决与目标处理器,但一般包括线程跳转和延迟退栈这两种优化。

    线程跳转的目的是减少跳转操作的次数。而延迟退栈是指在嵌套函数调用时推迟退出堆栈的时间,如果不做这个优化,函数调用每次完成后都会弹出堆栈中的函数参数,做这种优化后,在栈中保存了函数的参数,直到所有所有递归调用后才同时弹出堆栈中积累的函数参数。。-O2选项包含了对-O1所做的优化,还包括了安排处理器指令时序,使用-O2优化是,编译器保证处理器在等待其他指令的结果或来自高速缓存或主存的数据延迟时仍有可执行的指令,它的实现和处理器紧密相关,-O3级优化包含-o2级别的优化,同时还包含循环展开以及其他一些与处理器结构相关的优化内容。

    与处理器相关的优化有-ffastmath,-finline-function,-funroll-loops。

    优化带来的问题,编译时间长(只有在版本结束或发行时再优化);优化级别越高,程序量越大,特别是-O3在优化时需要一定的交换空间,它和程序对RAM要求成正比,在一定程度上会带来很大的负面效应;在使用优化后,调试会变得很困难。跟踪可执行程序变得很困难。

    4.调试选项

    选项-g 后面可以跟级别,1\2\3,-g1仅生成必要的信息以创建回退和堆栈转储,而不包含与局部变量和行号相关的调试信息。-g2是默认的级别,调试的信息包括扩展的符号表\行号\以及局部或外部变量信息。3级在此基础上加了宏定义信息。

    若果使用的是GNU Debugger gdb,需要使用-ggdb选项来生成额外的调试信息以方便gdb的使用。但其代码会急剧的增长。

    除了这两个选项,还有-p\-pg\-a\-save-temps\,他们将统计信息添加到二进制文件中,利用这些信息,程序员可以找到性能瓶颈,-p选项是在代码中加入prof能够读取的统计信息,而-pg选项是在代码中加入的符号则只能被GNU的prof解释,-a记录代码快执行次数的计数器,-save-temps选项用于保存在编译过程中生成的中间文件如目标文件和汇编文件。

     


    最新回复(0)