zoukankan      html  css  js  c++  java
  • gcc常用命令介绍

    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的文件里面


    作者:coderkian
    出处:http://www.cnblogs.com/coderkian/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    返回表对象的方法之一--bulk collect into
    coolite 获取新的页面链接到当前页面指定位置Panel的运用
    oracle 当前年到指定年的年度范围求取
    JAVA WEB 过滤器
    Java复习笔记(二):数据类型以及逻辑结构
    Java复习笔记(一):概念解释和运行步骤
    装饰器理解
    Flask大型项目框架结构理解
    JSP内置对象(一)
    Java Web第一个应用搭建
  • 原文地址:https://www.cnblogs.com/coderkian/p/3415016.html
Copyright © 2011-2022 走看看