现在的位置: 首页 > 综合 > 正文

编译小结(2) GCC常见用法及技巧

2014年08月11日 ⁄ 综合 ⁄ 共 1098字 ⁄ 字号 评论关闭

    这里把编译时常用的一些集中起来,方便查找。

例1.最简单的编译例子。
默认是编译成32位程序
    gcc -o xcl test.c 
编译成64位:
    gcc -m64 -o xcl test.c

各系统编译64位程序开关如下:
AIX   64BIT -maix64 
HP-UX 64bit -mlp64
Solaris 64bit -m64
Linux 64bit -m64

例2.如果想要能用gdb调试程序,可参考下面的命令行:
gcc -m64 -Wall -O -g -o xcl test.c
参数说明:
-Wall  输出所有的警告信息。
-O     在编译时进行优化。
-g     表示编译debug版本。

例3.高低版本发布兼容性处理.
如在RHEL6之类高版本系统上编译,但程序要发布到低版本RHEL4之类的系统上运行,
思考可能会因为glibc版本太低出现Floating Point Exception运行时错误,
可以在编译时加上参数"--hash-style=sysv"来解决
gcc -m64 -Wall -O -g -Wl, --hash-style=sysv -o xcl test.c

例4.如在代码中引用了其它文件,如other.c。则在编译时要将其加进去。    
  gcc -m64e -o xcl test.c other.c
  小技巧,当不能确定时,可以用 gcc -MM test.c 查出相依赖的.h文件,就能找到相关的.c文件了。
  这招也可用在写Makefile时。

例5.如引用到其它的lib或.h头文件
  gcc -m64 -Lcompenv/lib -ldemo -Icompenv/include  -o xcl test.c
   参数说明:
    -Lcompenv/lib  引用了当前compenv目录下lib目录中的库文件
    -ldemo
  编译时要链接当前compenv目录下lib中的libdemo.so动态链接库。
                   注意Unix/Linux下动态的命令规则为: “lib”开头“.so”结尾。
    -Icompenv/include  引用了compenv目录下lib目录中的.h文件

    除了"-I"指定头引用的文件目录,还可以用"CPATH"环境变量完成相同功能。
    export CPATH=$CPATH:/xcl/test/include
    指定后,就不要在gcc时指定"-I"参数了.

 例6.gcc编译器对新标准的支持,要注意。只有在编译时指定-std参数,才能正确的编译新特性。   
    //c99标准
  gcc -std=c99  -m64 -o xcl test.c
  //C++ 11标准
  g++ -std=c++11  -m64 -o xcl test.cpp
  注意c是小写,不要弄混了。

抱歉!评论已关闭.