<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/6272d8eec0b40515e3e3c88c/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/6272d8eec0b40515e3e3c88c/bg1.jpg"><div class="c x0 y1 w2 h2"><div class="t m0 x1 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">GCC<span class="_ _0"> </span><span class="ff2">使用入门(一)</span></div><div class="t m0 x2 h4 y3 ff1 fs0 fc0 sc0 ls0 ws0"></div><div class="t m0 x2 h5 y4 ff2 fs1 fc0 sc0 ls0 ws0">【<span class="ff3"><span class="_ _0"> </span></span>独家特稿】<span class="sc1">一、</span><span class="ff4">GCC<span class="_ _1"> </span></span><span class="sc1">简介</span></div><div class="t m0 x2 h5 y5 ff2 fs1 fc0 sc0 ls0 ws0">通常所说的<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>是<span class="_ _1"> </span><span class="ff3"><span class="_ _1"> </span></span>的简称,除了编译程序之外,它还含其他</div><div class="t m0 x2 h5 y6 ff2 fs1 fc0 sc0 ls0 ws0">相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接</div><div class="t m0 x2 h5 y7 ff2 fs1 fc0 sc0 ls0 ws0">执行的二进制代码。<span class="ff3"><span class="_ _1"> </span></span>是<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>平台下最常用的编译程序,它是<span class="_ _0"> </span><span class="ff3"><span class="_ _2"></span><span class="_ _0"> </span></span>平台编译器的</div><div class="t m0 x2 h5 y8 ff2 fs1 fc0 sc0 ls0 ws0">事实标准。同时,在<span class="_ _0"> </span><span class="ff3"><span class="_ _2"></span><span class="_ _0"> </span></span>平台下的嵌入式开发领域,<span class="ff3"><span class="_ _1"> </span></span>也是用得最普遍的一种编</div><div class="t m0 x2 h5 y9 ff2 fs1 fc0 sc0 ls0 ws0">译器。<span class="ff3"><span class="_ _1"> </span></span>之所以被广泛采用,是因为它能支持各种不同的目标体系结构。例如,它</div><div class="t m0 x2 h5 ya ff2 fs1 fc0 sc0 ls0 ws0">既支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),也</div><div class="t m0 x2 h5 yb ff2 fs1 fc0 sc0 ls0 ws0">支持交叉编译(即在<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>平台上编译的程序是供平台<span class="_ _1"> </span><span class="ff3"><span class="_ _0"> </span></span>使用的)。目前,<span class="ff3"><span class="_ _1"> </span></span>支持的体</div><div class="t m0 x2 h5 yc ff2 fs1 fc0 sc0 ls0 ws0">系结构有四十余种,常见的有<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>系列、<span class="ff3"></span>、<span class="ff3"><span class="_ _1"> </span></span>等。同时,<span class="ff3"><span class="_ _1"> </span></span>还能运行在</div><div class="t m0 x2 h5 yd ff2 fs1 fc0 sc0 ls0 ws0">不同的操作系统上,如<span class="_ _0"> </span><span class="ff3"><span class="_ _2"></span></span>、<span class="ff3"> !</span>、<span class="ff3">"<span class="_ _3"></span>#!<span class="_ _0"> </span><span class="ff2">等。</span></span></div><div class="t m0 x2 h5 ye ff2 fs1 fc0 sc0 ls0 ws0">除了上面讲的之外,<span class="ff3"><span class="_ _1"> </span></span>除了支持<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>语言外,还支持多种其他语言,例如<span class="_ _0"> </span><span class="ff3">$</span></div><div class="t m0 x2 h5 yf ff3 fs1 fc0 sc0 ls0 ws0">$<span class="ff2">、</span># <span class="ff2">、</span>% & <span class="ff2">、</span>'(&)<span class="ff2">、</span>*+<span class="_ _3"></span>+<span class="ff2">、</span> ! <span class="_ _0"> </span><span class="ff2">等。</span></div><div class="t m0 x2 h5 y10 ff2 fs1 fc0 sc0 ls0 ws0">本系列文章中,我们不仅介绍<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>的基本功能,还涉及到一些诸如优化之类的高级功</div><div class="t m0 x2 h5 y11 ff2 fs1 fc0 sc0 ls0 ws0">能。另外,我们还考察<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>的一些映像操作工具,如<span class="_ _1"> </span><span class="ff3">!,<span class="_ _0"> </span></span>和<span class="_ _1"> </span><span class="ff3">'(-<span class="_ _1"> </span></span>等,这将在后续</div><div class="t m0 x2 h5 y12 ff2 fs1 fc0 sc0 ls0 ws0">的文章中加以介绍。</div><div class="t m0 x2 h5 y13 ff2 fs1 fc0 sc1 ls0 ws0">二、程序的编译过程</div><div class="t m0 x2 h5 y14 ff2 fs1 fc0 sc0 ls0 ws0">对于<span class="_ _0"> </span><span class="ff3"><span class="_ _2"></span><span class="_ _0"> </span></span>编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下</div><div class="t m0 x2 h5 y15 ff2 fs1 fc0 sc0 ls0 ws0">图所示:</div><div class="t m0 x3 h6 y16 ff3 fs1 fc0 sc0 ls0 ws0">.....</div><div class="t m0 x2 h5 y17 ff2 fs1 fc0 sc0 ls0 ws0">从功能上分,预处理、编译、汇编是三个不同的阶段,但<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>的实际操作上,它可以</div><div class="t m0 x2 h5 y18 ff2 fs1 fc0 sc0 ls0 ws0">把这三个步骤合并为一个步骤来执行。下面我们以<span class="_ _0"> </span><span class="ff3"><span class="_ _1"> </span></span>语言为例来谈一下不同阶段的输</div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611850,0.000000,0.000000,1.611850,0.000000,0.000000]}'></div></div>
</body>
</html>