??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品免费一区二区三区,麻豆久久,97久久超碰国产精品旧版 http://m.shnenglu.com/runsisi/category/9693.htmlzh-cnTue, 30 Jun 2009 22:43:30 GMTTue, 30 Jun 2009 22:43:30 GMT60工具链构造彻底剖?/title><link>http://m.shnenglu.com/runsisi/articles/88491.html</link><dc:creator>runsisi</dc:creator><author>runsisi</author><pubDate>Thu, 25 Jun 2009 03:56:00 GMT</pubDate><guid>http://m.shnenglu.com/runsisi/articles/88491.html</guid><wfw:comment>http://m.shnenglu.com/runsisi/comments/88491.html</wfw:comment><comments>http://m.shnenglu.com/runsisi/articles/88491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/runsisi/comments/commentRss/88491.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/runsisi/services/trackbacks/88491.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt;">管是老生常谈Q但是在比较之前Q还是先明确一下什么叫做工具链?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> LFS/CLFS工具链是一套用于从C/C++源代码生成可执行文g的Y件组仉当地组合在一起Ş成的pȝ。它包括4大部分,~Z不可Q?/span></p> <p><span style="font-size: 12pt;"> 1、一套头文gQ包含了q些源代码所需要访问的pȝ接口?/span></p> <p><span style="font-size: 12pt;"> 2、binutilsQ包含一些处理二q制可执行文件所需的工P如汇~器、连接器{等?/span></p> <p><span style="font-size: 12pt;"> 3、gccQ包含了~译C/C++源代码所需的工Pq且q能自动调用相关的binutils工具来完成生成源代码的工?/span></p> <p><span style="font-size: 12pt;"> 4、glibcQ包含了pȝ接口的具体实现?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 在上面的定义中,h意这些Y件必适当地组合,才能形成完整的工具链。那么怎么才算适当l合呢?当然Q这个工具链必须能够发挥作用Q也是实能够~译出目标代码,然后才能适当l合?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 那么Q一个适当l合的工具链应当h什么特点呢Q一般我们把工具链运行的机器UCؓhostQ所产生的代码称为target。那么对于工具链的要求便是:它必要能在host上运行,所产生的代码必能在target上运行。再q一步分析:</span></p> <p><span style="font-size: 12pt;"> 1、头文gQ必L针对target的,因ؓ使用q个工具铄译的源代码需要访问的pȝ接口是trget上的?/span></p> <p><span style="font-size: 12pt;"> 2、binutilsQ必能在host上运行,然而生target的代码?/span></p> <p><span style="font-size: 12pt;"> 3、gccQ和binutils一栗不q这里要注意的是Qgcc自n带有一个库Q称为libgccQ它必须是target上的代码?/span></p> <p><span style="font-size: 12pt;"> 4、glibcQ必Ltarget上的代码?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 有了q些基本认识Q让我们来看一看一些实际的工具链构造过E?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> LFS工具链构造顺序:binutils p1->gcc p1->头文?>glibc->adjust->gcc p2->binutils p2</span></p> <p><span style="font-size: 12pt;"> 其中最后两步应该可以互换,但头两步不行。如果你有留意编译过E,会发玎ͼ当gcc~译的时候,一旦内部编译第一ơgcc完成Q生了xgcc文gQ随后的~译׃利用新编译的gcc以及W一遍的binutilsQ而不是宿ȝgcc和binutils?/span></p> <p><span style="font-size: 12pt;"> 正如youbest指出的,W一遍的binutils和gcc存在的意义,仅仅是ؓ了能~译出glibc。而glibc的编译需要工具链所有其它内容,包括binutils,gcc和头文g?/span></p> <p><span style="font-size: 12pt;"> LFS不用交叉编译,因此host和target永远是一L。在~译参数中,我们永远看不?-host?-target的n影。但是,׃工具铄引用路径需要反复变化,因此我们需要通过修改specs来更攏V这ҎLFS比较Ҏ出错的地斏V?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> CLFS֐思义Q是要采用交叉编译的。其构造顺序如下:</span></p> <p><span style="font-size: 12pt;"> 头文?>cross binutils->cross-gcc c->glibc->gcc final (c/c++)</span></p> <p><span style="font-size: 12pt;"> 我们首先看到头文件被攑֜了开头。这不是必须的,它完全可以放在glibc之前。cross-gcc只能~译出C~译器,因ؓq时候工具链q不全,glibcq不存在Q不可能~译出C++~译器。然后构建glibc。之后,我们才能~译出C++~译器,完成我们的工具链?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> CLFS-SYSROOT的工具链E有不同Q顺序如下:</span></p> <p><span style="font-size: 12pt;"> 头文?>cross-binutils->glibc头文?>cross-gcc c->gibc->gcc-final (c/c++)</span></p> <p><span style="font-size: 12pt;"> 我们看到q里多了一个glibc头文件的安装。事实上Q这是由于这里编译的gcc是要用sysroot的缘故。在gcc/configure里面有一D代 码,大家在vi里面输入/inhibit_libc=false可以发玎ͼ在交叉编译,而没有SYSROOT的情况下Qinhibit_libc的g 成ؓtrueQ而要是sysroot了,false了?/span></p> <p><span style="font-size: 12pt;"> q个变量的作用,如同有关的注释所qͼ是用来关闭gcc对glibc头文件的依赖。因此,在sysroot下我们才会需要这样一个安装glibc头文件的步骤?/span></p> <p><span style="font-size: 12pt;"> 我想在sysroot下消除这个步骤,之前试q这个补丁可行:</span></p> <p><span style="font-size: 12pt;"> 使用q个sed命o打个补丁卛_Q?/span></p> <p><span style="font-size: 12pt;"> cp gcc/configure{,.orig}</span></p> <p><span style="font-size: 12pt;"> sed -e 's/inhibit_libc=false/inhibit_libc=true/g' gcc/configure.orig > gcc/configure</span></p> <p><span style="font-size: 12pt;"> 不过最q发现有更简单的ҎQ在configure的时候加个参?-with-newlib卛_。徏议采用这个方法,因ؓ不需要打M补丁?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 在此再说一句,工具链构E中Q编译脚本对于是否交叉编译的判断非常单,只要host!=targetQ就会被认ؓ正在交叉~译。这也就是ؓ什? CLFS中用的$CLFS_HOST通常都是i686-cross-linux-gnuq样的Ş式。原因很单,因ؓ要确?CLFS_HOST ?CLFS_TARGET不同。这P你完全可以在i686?交叉~译"i686的代码?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> q点非常重要Q这意味着我们不需要打M补丁Q即可利用CLFS和CLFS-SYSROOT代替LFS来完成系l。对于想做Multilib的朋友,q也是一个福韟뀂毕竟,CLFS-SYSROOT比vCLFS和LFS来,节省了大量的~译q程?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 最后,我们来理解一下如何作CCLFS工具链。这意味着我们要在一个^C构徏在第二个q_上运行、生成第三个q_上代码的工具链。我们用build表示 构徏工具铄机器Qhost表示工具链要q行的机器,target表示工具铄成的代码所在机器。而在工具铄件上Qhost-target binutils表示该binutils在host上运行,要生成target的代码?/span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 步骤如下Q?/span></p> <p><span style="font-size: 12pt;"> host 头文?>build-host binutils->build-host gcc c->host glibc->target 头文?>build-target binutils->build-target gcc c->target glibc->host-target binutils->host-target gcc final (c/c++)</span></p> <p><span style="font-size: 12pt;"> </span></p> <p><span style="font-size: 12pt;"> 注意事项如下。首先,头文件必d相应的glibc之前安装。其ơ,build-target的binutils和gcc在这里的目的是生成target glibc。而build-host binutils q会被构建host-target binutils和gcc的过E用到。最后,前两ơ的gcc都可以只生成c~译器,因ؓ他们的目的都只是生成glibc。只有最后一ơgcc需要完整生成?/span></p> <p><span style="font-size: 12pt;">from: http://www.linuxsir.org/bbs/thread325648.html<br></span></p> <p><span style="font-size: 12pt;"></span></p> <p><span style="font-size: 12pt;"></span><span style="font-size: 12pt;"></span><span style="font-size: 12pt;"></span><span style="font-size: 12pt;"> </span><span style="font-size: 12pt;"></span></p> <br><img src ="http://m.shnenglu.com/runsisi/aggbug/88491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/runsisi/" target="_blank">runsisi</a> 2009-06-25 11:56 <a href="http://m.shnenglu.com/runsisi/articles/88491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~译工具?/title><link>http://m.shnenglu.com/runsisi/articles/76632.html</link><dc:creator>runsisi</dc:creator><author>runsisi</author><pubDate>Sun, 15 Mar 2009 05:04:00 GMT</pubDate><guid>http://m.shnenglu.com/runsisi/articles/76632.html</guid><wfw:comment>http://m.shnenglu.com/runsisi/comments/76632.html</wfw:comment><comments>http://m.shnenglu.com/runsisi/articles/76632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/runsisi/comments/commentRss/76632.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/runsisi/services/trackbacks/76632.html</trackback:ping><description><![CDATA[<p>~译工具铑ְ是编译出所需要的内核Q库函数以及应用E序所使用的工兗编译工具主要由以下3部分l成Q?br>binutils:一l开发工P包括q接器,汇编器和其他用于目标文g和案的工具<br>gcc:包含GNU~译器的集合Q其中有C和C++~译?br>glibc:提供pȝ调用和基本函数的C库,比如open,malloc,printf{。所有动态连接的E序都要用到?/p> <p><br>GNU binutils 是一个二q制工具包,主要包括Q?/p> <p>ld-GNU的连接器<br>as-GNU汇编?/p> <p>除此之外q包括以下工P</p> <p>addr2line -地址转化为文件名和行?br>ar -创徏、修攏V解压归档文?br>c++filt - C++ 关键词过滤器 <br>gprof - 昄M信息 <br>nlmconv - 目标代码{换ؓNLM <br>nm - 列出目标文g的标?br>objcopy - 复制和翻译(~译器翻译)目标文g <br>objdump - 昄目标文g信息<br>ranlib - 创徏归文g索引<br>readelf - 昄ELF 格式目标文g的烦?br>size -列出目标文g或者归文件的D长<br>strings -列出文g中的可打印字W串<br>strip - 删除标记<br>windres - Windows 源文件的~译?/p> <p>q中间的大部分程序都使用Binary File Descriptor library来进行底层处理。很多程序还要用?opcodes library 来进行机器指令的汇编<br>和Wintel一Pbinutils也被引入C各种各样的UNIXpȝ中,它的引入使得GNUpȝ能够更方便的~译和连接程序?br></p> <img src ="http://m.shnenglu.com/runsisi/aggbug/76632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/runsisi/" target="_blank">runsisi</a> 2009-03-15 13:04 <a href="http://m.shnenglu.com/runsisi/articles/76632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.dztsc.cn" target="_blank">þþŷղa</a>| <a href="http://www.gvsx.cn" target="_blank">˺ݺۺϾþ88</a>| <a href="http://www.shaosang.cn" target="_blank">þþžƷ</a>| <a href="http://www.mcyoyo.cn" target="_blank">ŷ龫Ʒþþþþþþžž</a>| <a href="http://www.unicity642.com.cn" target="_blank">ݺɫþۺ</a>| <a href="http://www.jsykszn.cn" target="_blank">þһձɫۺϾþ</a>| <a href="http://www.hnxxzw.cn" target="_blank">ަvþþ</a>| <a href="http://www.ok66668.cn" target="_blank">ξþ99ƷþþþþС˵</a>| <a href="http://www.248hh.cn" target="_blank">Ʒþþþþþþ</a>| <a href="http://www.ahlmnet.cn" target="_blank">þһŷպ </a>| <a href="http://www.2jg.com.cn" target="_blank">ˮϵþþƷ</a>| <a href="http://www.chainou.cn" target="_blank">ɫɫݺɫۺϾþ</a>| <a href="http://www.izakka.net.cn" target="_blank">ղƷaëƬþ</a>| <a href="http://www.jxscool.cn" target="_blank">޾ƷþþþþͼƬ </a>| <a href="http://www.vyty.cn" target="_blank">þ99Ʒ</a>| <a href="http://www.vlln.cn" target="_blank">ҹƷþþþþþ</a>| <a href="http://www.dszixun.cn" target="_blank">ƷþþþӰԺɫ</a>| <a href="http://www.shantiee.cn" target="_blank">ɫ͵͵88ŷƷþþ</a>| <a href="http://www.sspfn.cn" target="_blank">99þ뾫Ʒϵ</a>| <a href="http://www.yahooproxy.cn" target="_blank">һɫƵþվ</a>| <a href="http://www.00053119.cn" target="_blank">91Ʒպþò</a>| <a href="http://www.chaikuo.cn" target="_blank">þ99ֻоƷ</a>| <a href="http://www.6dt.com.cn" target="_blank">þ뾫Ʒһ</a>| <a href="http://www.debtee.cn" target="_blank">˺ݺۺϾþ</a>| <a href="http://www.logeng.cn" target="_blank">þþþ99ƷƬŷ</a>| <a href="http://www.fq2.com.cn" target="_blank">鶹avþavʢav</a>| <a href="http://www.idqs.cn" target="_blank">?VþþƷ </a>| <a href="http://www.rnsqwp.cn" target="_blank">˾þþƷ鶹</a>| <a href="http://www.viples.cn" target="_blank">պӰԺþ</a>| <a href="http://www.cext.cn" target="_blank">Ļ˾þ</a>| <a href="http://www.hgndg.cn" target="_blank">ɫ͵͵91þۺ</a>| <a href="http://www.linkyes.cn" target="_blank">㽶þAһ</a>| <a href="http://www.baidudianying.cn" target="_blank">Ʒ׾þAAAƬ69</a>| <a href="http://www.sskca.cn" target="_blank">seguiþùƷ</a>| <a href="http://www.idqs.cn" target="_blank">91Ʒ91þþþþ</a>| <a href="http://www.yxcyfa.cn" target="_blank">Ʒžžžþþž</a>| <a href="http://www.gkbv.cn" target="_blank">Ʒþþþ9999</a>| <a href="http://www.pb-wines.cn" target="_blank">VVþþ</a>| <a href="http://www.fygjkd.cn" target="_blank">99鶹þþùƷ</a>| <a href="http://www.zfrnhbv.com.cn" target="_blank">Ʒ99þ99þþ</a>| <a href="http://www.dgdike.cn" target="_blank">99þѹƷ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>