GCC 全称是 GNU C Compiler,是gnu中最流行的c & c++编译器,下面我们看一下一些主要的参数使用方法。

对于一个源文件可以直接生成可执行文件

gcc test.c

默认生成a.out, -o指定生成的文件名

gcc test.c  -o test

实质上,上述编译过程是分为四个阶段进行的,包括预处理(Preprocessing)、编译(Compilation)、汇编 (Assembly)和链接(Linking)。

1.编译过程

1.1预处理

gcc -E test.c -o test.i

-E指定gcc预处理结束就停下来,主要完成包含头文件、去除注释、替换宏等工作

1.2编译

gcc -S test.i -o test.s

-S将源文件编译成汇编代码

1.3汇编

gcc -c test.s -o test.o

gas汇编器负责将汇编代码编译为机器代码

1.4链接

gcc test.o –o test

2.调试

gcc -g test.c –o test

-g生产供gdb调试用的debug信息,生成的可执行文件大,执行效率低

strip可以删除其中的debug信息

strip test

3.优化编译

gcc -O test.c -o test

-O使编译器对代码进行自动优化编译,生产效率更高的可执行文件,另外

-O0   不优化

-O|-O1, 默认优化

-O2  -O3 更高级别优化

4.检错

gcc -Wall test.c –o  test

-Wall,将所有的警告信息全开

5.库文件

编译动态库

gcc –shared –fPIC  test.o –o libtest.so

-shared 表示生产动态链接库

-f后面跟一些编译选项,PIC表示生产位置无关代码(Position Independent Code),即可以在进程的任意内存位置执行的目标码

编译静态库

ar cr libtest.a test.o

-c表示创建一个新的库,-r表示插入文件号码到库中

链接库文件

gcc test.c -L/path/lib -lxxx -I/path/include

-I, 指定头文件所在的文件夹

-l, 指定所使用到的函数库。默认优先使用动态库libxxx.so,-static选项可以禁止使用动态库

-L,指定函数库所在的文件夹

动态库链接时搜索路径顺序:

1. 编译目标代码时-L指定的动态库搜索路径

2. 环境变量LD_LIBRARY_PATH(动态库搜索路径)

3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径

4. 默认的动态库搜索路径/lib、/usr/lib

静态库链接时搜索路径顺序:

1. 参数-L指定路径

2. 环境变量LIBRARY_PATH(指定程序静态链接库文件搜索路径)

3. 默认目录 /lib 、/usr/lib、 /usr/local/lib

6.宏

-Dmacro

相当于#define macro

-Dmacro=defn

相当于#define macro=defn

-Umacro

相当于#undef macro

7.头文件依赖

-M,生成文件关联的信息,包含目标文件所依赖的所有头文件

-MM,同上,但忽略由#include<file>造成的依赖关系

-MD,和-M相同,但是输出将导入到.d的文件里面

-MMD,和-MM相同,但是输出将导入到.d的文件里面

gcc常用命令介绍的更多相关文章

  1. GCC常用命令行一览表

    GCC常用命令行一览表 这些常用的 gcc/g++ 命令行参数,你都知道么?1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_ ...

  2. maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  3. Hadoop生态圈-zookeeper本地搭建以及常用命令介绍

    Hadoop生态圈-zookeeper本地搭建以及常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.下载zookeeper软件 下载地址:https://www.ap ...

  4. Hadoop生态圈-phoenix完全分布式部署以及常用命令介绍

    Hadoop生态圈-phoenix完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. phoenix只是一个插件,我们可以用hive给hbase套上一个JDBC壳,但是你 ...

  5. Docker 安装与常用命令介绍

    docker的镜像文件作用就是:提供container运行的文件系统层级关系(基于AUFS实现),所依赖的库文件.已经配置文件等等. 安装docker yum install -y docker 启动 ...

  6. 转:maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  7. Linux操作系统安全-OpenSSL工具常用命令介绍

    Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...

  8. cmd常用命令介绍

    一.cdm命令介绍:CMD命令是一种命令提示符,CMD是command的缩写,即命令提示符(CMD),位于C:\Windows\System32的目录下,是在OS/2,Win为基础的操作系统(包括Wi ...

  9. 数字证书管理工具keytool常用命令介绍

    需要给一个apk加签名,用到了keytool这个工具,下面转载一篇介绍keytool的文章 http://blog.chinaunix.net/uid-17102734-id-2830223.html ...

随机推荐

  1. 提升GDI画图的效率

    假设我们要画一个坐标图,里面可能还需要画网络线.XY各个单位的值.曲线或直线等,可能的函数代码如下: void OnPaint () { CPaintDC dc (this); DrawXY (&am ...

  2. 用JSON数据向已定义列的表格添加数据行

    其实添加方式和在MVC中动态读取JSON数据创建表格一样,只不过一个是完整表格添加,一个是从表格中间添加.不详细说明了. <div> <table class="table ...

  3. 基于jquery的侧边栏分享导航

    今天给大家分享一款基于jquery的侧边栏分享导航.这款分享钮一直固定于左侧,鼠标经过的时候凸出显示,这款分享按钮适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  4. IOS 按比例裁剪图片

    拍照或者从图片库中获取图片 操作过程中容易闪退,也总会有内存压力警告,第一步,首先可以考虑裁剪图片,实际上可能不需要那么大的.其次可以考虑把耗时的比如存储过程放进线程. 这里封装裁剪图片的类方法. / ...

  5. [经典算法] 蒙地卡罗法求 PI

    题目说明: 蒙地卡罗为摩洛哥王国之首都,该国位于法国与义大利国境,以赌博闻名.蒙地卡罗的基本原理为以乱数配合面积公式来进行解题,这种以机率来解题的方式带有赌博的意味,虽然在精确度上有所疑虑,但其解题的 ...

  6. 【Android 界面效果19】Android中shape的使用

    Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结: 先看下面的代码:         <shape>      ...

  7. DPKG命令与软件安装、APT

    ====Linux软件包==== Linux系统中,软件通常以源代码或者预编译包的形式提供. 软件的源代码通常需要编译为二进制代码才可使用,安装比较耗时.用户可以自行调节编译选项,决定需要的功能或组件 ...

  8. Java学习笔记——多态性Polymorphism

    Java中实现多态的机制 Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就 ...

  9. C#备份,还原数据库

    private void btnBack_Click(object sender, EventArgs e) { string saveAway = @"C:\1.bak"; // ...

  10. Ubuntu14.04 搭建 node.js 环境(Binaries方式)

    从官网下载 http://nodejs.org/download/ Linux Binaries (.tar.gz)  下载下来的是node-v0.10.29-linux-x64.tar.gz文件 解 ...