zoukankan      html  css  js  c++  java
  • gcc常用指令及相关知识

    1,gcc与g++的问题:

    1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。

    2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。

    当我们常规使用gcc编译一个程序时,他通常执行4个步骤:预编译,编译,汇编,连接.

    当然我们可以通过指定某个选项来使它停止在某个步骤上.

    指定GCC进行的操作的选项

      -E :让GCC仅进行预处理;得到 .i 文件;

      -S :让GCC仅进行预处理,编译;得到 .s 文件;

      -c :让GCC仅进行预处理,编译,汇编;得到 .o 文件;

      -o Ouput:指定输出文件,让GCC仅进行预处理,编译,汇编,连接;得到 可执行文件(默认为a.out);

    控制输出信息

      -w:禁止输出所有警告信息

      -Wall:输出所有警告信息

      -Werror:将所有警告信息当成错误信息输出。

    调试相关选项(生成调试信息)

      -g:生成用于GDB调试程序使用的调试信息

      -p:生成用于prof程序使用的调试信息

      -pg:生成用于gprof程序使用的调试信息

    程序优化选项

      -O,-O1:初步优化(会占用更多时间进行编译,但是编译后的程序运行时占用的内存更少)

      -O2:比-O1更进一步优化

      -O3:比-O2更进一步优化

      -O0:不进行优化

    宏操作

      -D name:定义宏name的值为1,类似在源程序中使用#define name 1

      -D name=val:定义宏name的值为val,类似#define name val

      -U name:取消宏name的定义,类似#undef name

      -undef:取消所有系统指定或GCC指定的宏定义,但保留标准预定义的宏

    指定搜索目录

      -I dir,-Idir:追加目录dir到头文件的搜索路径中

      -L dir,-Ldir:追加目录dir到库文件的搜索路径中

      -Bprefix:指定gcc查找库文件,头文件,数据文件的目录

    指定使用的库文件,头文件

      -nostdinc:不使用标准头文件(默认在/usr/include)

      -nostdlib:不使用标准库文件(默认在/usr/lib)

      -l library:指定使用的库文件,默认gcc在编译一个程序时只连接到标准c库 上,是用该选项能够使他连接到指定的库上,例如若你要连接到数学库上(libm.a)则你只须指定 -lm就可以了。也就是说这个选项指定连接的库文件可以将前缀lib和后缀.a(或.so)省略。

      -nostartfiles:不使用标准的系统的startup文件

    指定连接库文件的方式

      -shared:动态连接到库文件上,这是默认行为。

      -static:静态连接到库文件上

      注:动态连接和静态连接的区别在于:动态连接是在程序运行时才连接到库文件上(也就是需要用到时才连接上),而静态连接则是在编译时就将程序连接到库文件中(这样做会增大程序,但便于移植)

    备注:

    选项 -Wall 开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。编译器有很多其他的警告选项,但 -Wall 是最常用的。默认情况下GCC 不会产生任何警告信息。当编写 C 或 C++ 程序时编译器警告非常有助于检测程序存在的问题。

    参考:

    http://blog.chinaunix.net/uid-27040051-id-3444056.html

    http://www.ha97.com/2884.html

  • 相关阅读:
    CSS之旅——第二站 如何更深入的理解各种选择器
    CSS之旅——第一站 为什么要用CSS
    记录一些在用wcf的过程中走过的泥巴路 【第一篇】
    asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result
    asp.net mvc 之旅—— 第一站 从简单的razor入手
    Sql Server之旅——终点站 nolock引发的三级事件的一些思考
    Sql Server之旅——第十四站 深入的探讨锁机制
    Sql Server之旅——第十三站 对锁的初步认识
    Sql Server之旅——第十二站 sqltext的参数化处理
    Sql Server之旅——第十一站 简单说说sqlserver的执行计划
  • 原文地址:https://www.cnblogs.com/yinheyi/p/5919910.html
Copyright © 2011-2022 走看看