您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 4浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GCC的学习(一)GCC简介及其常用选项

我什么都布吉岛 发布时间:2019-09-19 15:00:30 ,浏览量:4

一、什么是GCC?

GCC(the GNU Compiler Collection)GCC是GNU编译器集合,它包括了C/C++、Objective-C、Fortran、Ada和Go语言的前端和对应的库(libstdc++)GCC初衷是为完全免费的GNU系统编写的编译器。

二、程序编写到执行过程是怎么样的?

一个C程序从编辑到执行需要经过以下过程:

#mermaid-svg-nTfl1Lnfc30PYa0H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .error-icon{fill:#552222;}#mermaid-svg-nTfl1Lnfc30PYa0H .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nTfl1Lnfc30PYa0H .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-nTfl1Lnfc30PYa0H .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nTfl1Lnfc30PYa0H .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nTfl1Lnfc30PYa0H .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nTfl1Lnfc30PYa0H .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nTfl1Lnfc30PYa0H .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nTfl1Lnfc30PYa0H .marker.cross{stroke:#333333;}#mermaid-svg-nTfl1Lnfc30PYa0H svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nTfl1Lnfc30PYa0H .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .cluster-label text{fill:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .cluster-label span{color:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .label text,#mermaid-svg-nTfl1Lnfc30PYa0H span{fill:#333;color:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .node rect,#mermaid-svg-nTfl1Lnfc30PYa0H .node circle,#mermaid-svg-nTfl1Lnfc30PYa0H .node ellipse,#mermaid-svg-nTfl1Lnfc30PYa0H .node polygon,#mermaid-svg-nTfl1Lnfc30PYa0H .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nTfl1Lnfc30PYa0H .node .label{text-align:center;}#mermaid-svg-nTfl1Lnfc30PYa0H .node.clickable{cursor:pointer;}#mermaid-svg-nTfl1Lnfc30PYa0H .arrowheadPath{fill:#333333;}#mermaid-svg-nTfl1Lnfc30PYa0H .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nTfl1Lnfc30PYa0H .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nTfl1Lnfc30PYa0H .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-nTfl1Lnfc30PYa0H .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-nTfl1Lnfc30PYa0H .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nTfl1Lnfc30PYa0H .cluster text{fill:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H .cluster span{color:#333;}#mermaid-svg-nTfl1Lnfc30PYa0H div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nTfl1Lnfc30PYa0H :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
预处理
汇编
编译
链接
载入内存并链接依赖库
编写源代码_*.c/*.cpp
已预处理文件_*.i
汇编文件_*.s
目标文件_*.o
可执行或者库文件_*.exe/*.so/*.a
程序被CPU执行
三、编译过程中文件内容的变化

编译一共需要处理四个文件(CISO):

  • 源代码文件(*.c)
  • 预处理文件(*.i)
  • 汇编文件(*.s)
  • 目标文件(*.o)

最后一步处理目标文件的过程称为链接,链接后将生成可执行或者库。下面通过观察处理的中间代码(CISO)建立编译过程的直观感受:

假如我编辑并保存了如下程序

//gcctest.cpp
#include 
using namespace std;
#define AAA 33333

int main()
{
    double a=3.14;//ordinary variable
    double &r=a;//ordinary referenece
    cout            
关注
打赏
1658157489
查看更多评论
0.0385s