zoukankan      html  css  js  c++  java
  • gcc和g++常用编译参数

    -w -W -Wall

      -w 关闭编译警告。平时编写c/c++代码如果不规范,编译的时候会抛出很多警告。但是一般的警告都是可以忽略的,比如类型转换。编译的时候可以加-w关闭警告

      -W 也是关闭编译警告,但是比-w智能一些,它只会显示编辑器认为会出错的警告

      -Wall, 显示所有警告。

      比如下面的代码,test.c

      

      gcc -o a.out test.c -Wall,   把所有的警告都显示出来了,没有使用的变量i,在void函数返回了double。

      

      gcc -o a.out test.c -W, 只显示了编译器认为会出错的警告, 没有使用变量i的那个警告编译器认为不会出错,所以没有输出。

      

      gcc -o a.out test.c -w,  屏蔽了所有警告,只输出错误

      

    -g   -g3

      gcc 支持4中级别的调试信息,-g0表示不生成调试信息,-g3表示生成最多的调试信息。-g默认为-g2。一般的调试信息包括行号,函数,外部变量。-g3包含其他额外的调试信息,比如宏定义。

    -O1 -O2 -O3 -Os

      -O系列选项主要用于优化代码。

      -O和-O1是等价的,不影响编译速度,并且会采用一些优化算法,降低代码大小并提高代码运行速度。

      -O2,会降低编译速度,但是除了包含-O1的优化算法之外,还会采用一些其他的优化算法来提高代码运行速度。

      -O3,除了包含-O2所有的优化外,会采取一些向量化算法,提高代码的并行执行程度,使之更充分地利用现代cpu的流水线和cache。

      -Os,-O3即使是增加代码的大小,也要提高运行速度。而这个选项在-O2的基础上,尽量减少目标的大小,这个经常用于存储量比较小的设备。

    -fno-strict-aliasing

      当优化级别在-O2即以上时,strict-aliasing会被采用。 编译器会假设代码中没有强制转换,从而会使用更加激进的优化算法对代码进行优化。也就是说,代码中如果存在类似于下面的代码就会出错:

        int num = 1.0;

        double *p = (int *)(&num);

      所以当优化级别在-O2及以上时,应该使用-fno-strict-aliasing关闭strict-aliasing。如果可以确保代码中不存在类似于上述的代码,那就不要关闭。据mysql的worklog描述,代码优化速度还是很可观的。

    -fPIC和-shared

      编译动态库时常用的两个选项。fPIC告诉编译器编译与地址无关的代码(position independent code)。代码中涉及到的地址都是相对地址,绝对地址运行时通过GOT计算得到。-shared告诉编译器编译的是一个动态库。如果没有-shared,编译器会以找不到main函数而失败返回。

    -wl,-rpath=...

      如果一份代码使用了自己编写的动态库,而且没有放在运行时查找动态库的默认路径中。在这台机器上编译,换个目录执行,就会报找不到动态库的错误。编译时使用的-L选项只是在程序链接成可执行文件时候用的,程序启动时候仍然会发生找不到库的情况。如果编译的时候这样: -wl, -rpath=path_of_lib(绝对路径), 那么在程序运行的时候,就不会出现动态库明明存在,但是找不到的情况了。

      

  • 相关阅读:
    用vs调试sql存储过程
    Html插入Flash.object.embed.swf各个参数值详解介绍[等比例缩放]
    SQL SERVER分区具体例子详解
    C#身份证识别相关技术
    C#调用Java方法(详细实例)
    Visual Studio各版本工程文件之间的转换
    彻底解决asp.net mvc5.2.2:vs2013 cshtml视图文件报错(当前上下文中不存在名称“model”,ViewBag,Url)
    HTML 5 Web 本地存储
    让WeuiPicker隐藏日期中的日,只保留年月
    javascript获取值
  • 原文地址:https://www.cnblogs.com/MyOnlyBook/p/9526889.html
Copyright © 2011-2022 走看看