Liunx操作-Record07—gcc编译器的运作流程及编译参数的使用

目录

gcc编译器的工作流程

gcc编译参数使用

下面以执行add.c为例,对gcc编译器的使用进行说明:

使用"-I"指定包含的路径:"gcc add.c -I ./include"

使用"-o"创建结果文件:"gcc add.c -I ./include/ -o result"  

使用"-D"指定宏编译:"gcc add.c -I ./include/ -D DEBUG -o result"

使用"-g"生成gdb调试文件:"gcc add.c -I ./include/ -D DEBUG -o addresult -g"

使用"-Wall"用于显示警告:"gcc add.c -I ./include/ -D DEBUG -o addresult -Wall"

使用"-lstdc++"用c++的方式去编译

使用"-O"优化选项

指令参数汇总


gcc编译器专用于运行c语言程序的,但也可以运行c++程序,但需要加入特定指令参数。

g++编译器是专用于运行c++语言程序的,可以通过g++去专运行c++程序

gcc编译器的工作流程

普通的一个c程序,想要通过gcc编译器,变成一个可执行的操作程序,就是按以上的环节进行转换的,先对c文件进行预处理展开成后缀为".i"的文件,然后,再将这个文件转换为汇编形式的文件".s",再把这个文件转换为后缀".o"的二进制文件,最后再建立链接,才可以进行可执行的操作。 

当然,这些环节是编译器在运行的时候,自动操作完成的,我们敲指令的时候,并不需要敲出来。

通过"file filename"命令,可以看出,可执行的文件描述开头都是有"ELF"的。

gcc编译参数使用

下面以执行add.c为例,对gcc编译器的使用进行说明:

add.c源码:

#include <stdio.h>
#include "head.h"
//#define DEBUG 0
int main(void)
{
   // int c;
    int a =10, b =10;
#ifdef DEBUG
    printf("hello world\n");
#endif
    printf("%d + %d is %d\n",a,b,add(a,b));
    return 0;
}   

int add(int a,int b)
{
    return a+b;
}

使用"-I"指定包含的路径:"gcc add.c -I ./include"

所执行的.c文件的头文件没在当前路径下,使用"-I"指定包含的路径。

使用"-o"创建结果文件:"gcc add.c -I ./include/ -o result"  

使用"-D"指定宏编译:"gcc add.c -I ./include/ -D DEBUG -o result"

在通过gcc进行编译的时候,如何很方便的控制调试信息显示是很有必要的,gcc提供了命令参数"-D"来起到类似宏定义的操作,在本例的源码中:

//#define DEBUG 0
int main(void)
{
#ifdef DEBUG
    printf("hello world\n");
} 

存在一个被宏定义所控制的一个的打印信息。可以通过"-D"来控制这个命令是否执行:

使用"-g"生成gdb调试文件:"gcc add.c -I ./include/ -D DEBUG -o addresult -g"

通过"-g"生成的文件,是用于gdb调试的,有很多的调试信息,所以结果文件比平常时候要大

使用"-Wall"用于显示警告:"gcc add.c -I ./include/ -D DEBUG -o addresult -Wall"

使用"-lstdc++"用c++的方式去编译

hello.cpp源码:

/*************************************************************************
    > File Name: hello.cpp
    > Author: YeKai
    > Mail: yekai_23@sohu.com 
    > Created Time: 2016年11月01日 星期二 10时22分40秒
 ************************************************************************/

#include<iostream>
using namespace std;
int main(void)
{
    cout<<"hello world"<<endl;
    return 0;
}

注意:当然如果编译c++代码的话,可以也考虑g++编译器,就可以直接编译了!

使用"-O"优化选项

添加后,会自动对代码进行优化。但整体代码进行优化的话,会调整一些原先设定好的优先级顺序,造成报错,所以,使用这个选项的时候最好还是将代码拆开逐段逐段的调试。

指令参数汇总

  • I   包含头文件路径
  • L  包含库文件路径
  • l   库名 libxxx.so  用法:-lxxx (把前面的"lib"部分给去掉)
  • O  优化选项,1-3
  • W 警告 all 显示更多的
  • c  编译 成.o文件
  • E  输出到标准输出,宏替换,头文件展开
  • S  编译成汇编
  • lstdc++  编译c++代码
  • o 指定目标文件
  • g gdb调试使用

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值