版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、刖言GCC(GNU Compiler Collection , GNU译器合集)是 linux 以及其他类UNIX平台上进行开源项目,软件开发等必不可少的 工具链组成之一(工具链的其他成员包括bin utils,Glibc,libstdc+等)另夕卜,对于程序员以及系统管理员而言,经常需要从软件的源 码手动编译安装,而不论是 con figure 脚本,还是 make工具 /makefile 文件,最终 都需要调用gcc (或者其它编译器)来 进行实际的编译工作,因此,经常需要使用gcc的新版特性,并且与旧版gcc共存,根据实际的需求进行调用。在本篇博文中,我们以 centos6.532位 系
2、统上已安装的旧版gcc二进制可执行文件以及 Glibc C库为基础,从网上下载 最新版的gcc源码包手动编译安装,进行简单的测试,并且与 make工具整合,从con figure 脚本进行参数传递,优化编译 等。整个过程简单明了,图文代码并茂,希望能起到抛砖引玉的作 用,激发广大爱好者编程与学习的热情。编译,安装与测试前面我们多次提到:gcc应该在单独的目录里面进行配置和编 译,不要让生成的中间文件污染了源码目录,除非你决定在整 个安装过程结束后,删除源码目录和编译目录。我们使用单独的编译目录compile-dir 来存储经由make命令编译生成的二进制文件,然后用 make in stall
3、 命令,将这 些文件复制到最终的安装目录:/usr/local/new-exec-gcc-4.9.1首先,进入编译目录,在该目录下,以绝对路径的形式调用gcc源码目录下的con figure脚本文件,在其后面指定编译参 数,其中:-prefix=/usr/local/new-exec-gcc-4.9.1/就是上面讲到的最终安装路径。-en able-bootstrap这里引用网上一些文献对该参数的解释:用第一次编译生成的程序进行第二次编译,然后用再次生 成的程序进行第三次编译,并且检查比较第二次和第三次结果 的正确性,也就是进行冗余的编译检查工作。非交叉编译环境下,默认已经将该值设为enabl
4、e,可以不用显示指定;交叉编译环境下,需要显示将其值设为disable。-e nable-check in g=release以软件发布版的标准来对编译时生成的代码进行一致性检查;设置该选项为enable并不会改变编译器生成的二进制结果,但是会导致编译的时间增加; 该选项仅支持gcc编译器;总体而言,对于上面这个选项,机器的硬件配置较低,以及不 愿等待太久编译时间的童鞋,可以设置为disable ;但是这会增加产生未预期的错误的风险,所以应该慎用。可以同时设置 -disable-bootstrap与 -disable-checking,这对编译过程的提速很有帮助。-enable-threads
5、=posix顾名思义,启用 posix 标准的线程支持要让程序能在符合 POSIX规范的linux发布版上正确运行,就 应该启用该选项,取决于宿主或目标操作系统的类型,其它可 用值有:aix,dec,solaris ,win32等,如果你是其它的类 UNIX系统,就需要设置相应的值。-e nable-lan guages=c,c+支持的高级语言类型和运行时库,可以设置的所有语言包括 ada,c,c+,Fortra n,j ava,objc,obj-c+,GO等语言。这里只开启了 c和c+,因为支持的语言越多,就需要安装越多的相应静 态与动态库,还有五花八门的依赖库,这会让管理变得困难, 体积也
6、会变得庞大。-disable-multilib很多文章对这个参数的解释让人摸不着头脑。简单的讲,如果你的操作系统是32位,默认就已经设置为disable ,这意味着gcc仅能生成32位的可执行程序; 如果你的操作系统是 64位,默认就已经设置为 enable,这意 味着用gcc编译其它源文件时可以通过-m32选项来决定是否生成32位机器代码。如果在64位系统上,要禁止生成 32位代码, 设置-disable-multilib 。-e nable-gather-detailed-mem-stats允许收集详细的内存使用信息,如果设置该参数为enable,则将来编译好的gcc可执行程序,可以通过
7、-fmem-report 选项 来输出编译其它程序时的实时内存使用情况。-with-lo ng-double-128指定long double 类型为128位(16字节!);设置为without,贝U long double类型将为64位(8字节),这将与普通的double 类型一样。基于Glib 2.4以上版本编译时,默认已经是128位。1rootce ntos6-5vm桌面# cd /extracted-src-dir/gcc-4.9.1/2rootce ntos6-5vmgcc-4.9.1# cd /compile-dir/3rootce ntos6-5vmcompile-dir# pw
8、d4/compile-dir 5rootce ntos6-5vm compile-dir# /extracted-src-dir/gcc-4.9.1/co nfigure-prefix=/usr/local/new-exec-gcc-4.9.1/-e nable-bootstrap-e nable-check in g=release-e nable-threads=posix-en able-la nguages=c,c+-e nable-gather-detailed-mem-stats-with-lon g-double-128如果以上面给出的参数集来运行con figure脚本,会在
9、compile-dir 目录下生成configog, config.status ,Makefile ,serdep.tmp 四个文件,用gedit或者其它文本编辑器打开config.log,以error为关键字符串,搜索con figure检测到的潜在配置错误和警告,这对后面的make阶段能否正常编译至关重要:如果没有任何与error相关的警告信息,那么就认为可以执行make命令。/11 M - 立TraH Ibjii * l. K.u rA n!?wrrigu也 mm 丄:JHI* XI : ir=r:ft!祜匸1闻 rthethercccftt -ficitlc-1filth;* 叭量t
10、icHlbgc:11| ! r. J j . C c tizrYLGt g I2. f 2 : s:. 11 . ff-1 r r. t.: t. : I :也:口|-二 :丁匚 C5* uninicegnirBd Dption itnlie Iilntdo*itBi.it - libstdc* wt ltpl.4lRVPl.cd cnnwv?WF!閃和 gnlg&rc ; fn prog rwi w-t: /* confdlefs.lh / |帕eT悯 I Mf me j wriofi j ihleflLHt | define I i| / end ccTifdef-s-h.碎W備徘疋“ R
11、0UHGE TMVK RIUbG_VEKm ” 刪OWE HUNG ” mMGt ftKMPQRr B,RCKAGC URL LWC 彳 mjirii.4 nalrtfF 1 54Qn斡J|: CQnigr-cijKj: CQnijgiure:M?: c口n * iqiLie:,|44:nitac liDiiQlct* rut inpCenfitMcheckiraj fair -gntbindi reiult: nnnrH- IflB -t 帆了 conf “uw喜课用計+测试其对c”悴甲或玮的丈皆状衣时.率狡J.舉未暹有库1:件.廉搭莖者詛制试+世不舍#瑜*“岀兽遠出社蔓在日畜 XftHH平
12、嵐議用挣岛悒豪翩辅惟.在当前工作目录下,执行 make命令来启动编译进程,整个编 译过程花费的时间很大程度上取决于你的系统硬件配置,以及 指定给con figure脚本的参数,我的硬件配置如下,大概也花了近40分钟才编译完成:CenlOlW 2 HftaaP却1 ms jiJIJa-41LS MHTJtRE-:ifg n WdrM和s fhMfe (A ft | : 4E丄 i rltf lM CvwF 440 E # LZKMti:wlFuLwn 5 4WLR JLMCkbE:i riein. Lr *s 44si tn iimpgE I I nriifin. DrvF 5-440 CP_
13、申 3.ZKM&.i*4MpPl JLIHMUi ntiH.= m tj i 1 ::mpcTHiF liB H.THiF liB H.! HI49aMB*V44 Bii Ju |*hhvrmh!H#4* :1 1GJ/u.cum-:申:WTj-.MlliFrrfi -f *飞如 严砂甜、工- JI.I !便宜 丄2 rd:iIf #qGHI = 耳1丄-rW4ti : *42 LfetOaEArfirtM 0l,ibt-ji iK-i: I sa- AHFDEIttCflntl-Sl-5 Aflt lEPti I IFfD SATAl:1f,2 HTA cmiirtrtller: Intel
14、 Uriportt U t $crit/C21 Scries Cfeiput fwitv I-port SAT L* *、 在此基础上,我用下面的命令来加速编译过程,其中-j指定同时开启的进程数,要充分发挥多核处理器的并行执行优势, 这个值应该是处理器芯片上物理核心的2倍。根据测试,上面的硬件配置并行执行8个进程编译,大约20分钟多一些就编译 完成了,所以,CPU要给力才行。1 rootcentos6-5vm compile-dir# make -j 8另外,如果在make中途出错退出,应该执行下面指令清空compile-dir目录下的相关文件,包括makefile ,1 rootcentos
15、6-5vm compile-dir# make distclean然后根据错误提示修改传递给 con figure 脚本的参数,或者安 装相关依赖库,支持包等等,重新运行 con figure脚本,检查 config.log 文件的内容,最后再次执行 make命令。执行下面的命令将编译好的可执行文件,库文件等,从compile-dir复制至 U/usr/local/new-exec-gcc-4.9.1/目录下面,完成最后的安装。t*Mt t3W(F WIlibtMl: Ihstill Staled EM /uir Aa al /m - c i*c -f -4 : 9.1H I b/1 S bd
16、 tnlt.1/111/1rEoJ.IJpt Is*et 加 ElF tilt It ha千 tM rsnfl umic UrfiE it th* ftirtPLibrarSes have beea InstilliHi in:/WAwVMBK 4SC 4.1.l/l.|bMr4lM|*|ym e*erto -unt to tJMtintdlld lltoMritim idirtetarfi IWI虬 仲 Bull tithir wit 忖就加飢 tndtin full pathrnt at th* iitHrtrf, ar wsi VhiIfLg darlikg Llmfrinig iml!
17、 4d aC laatT iBha at th tAkloBlng: “d lliwia 初 thv U.BBLIl*irHf*TH- mirvniwnt “科沖也 flartag eirutiDn亠 LllCI* lg the ,La_SU_MTHiJ rn-virviwnt virlbtliNklnf-e the -ll.-rpatli -n.imiR UaLer Fl列* k4V Hwr tyilM utainHifuter M lIDi t /(c/U.M.ecnfp4 ffhtFftlHg tFBtM 4QlTlViri 鼻乂t 1祕 Hbrr|ti 甲.r piri iHfunMl
18、Wn Ml 4i tbt ld(1) a ml 14. tod) Mnuftl Bigtn.Nothlnf tn bi 4hr 甲of Insttllr data puifc|(4j:d|.r|tFfMlceoi: LHJiAa dlcicterf pulti(l:dlr ectcrrHtil1: Itavim dirictiory茵丈件被芒装护 usr/luci ;fie-exec-scc-4 9L 1/1 i b 目录1:史世说号iK満# Y :如霰肯不標快用上面酣出的口壊(LI EDM*迖厦用飾比障冲 陡H何屮订安皆旳曲疋毬伸用舌rH.芹UT将览试毒旳主豊略軽居宜者忑堆好却侵用-L1.I
19、BDII!标记并 且*; I认药皐文4 Mif . U:需堆常打样定斗文件的廿卜在机和问杷LIBDIR畢加1( LD-llBIAIT-P.nU平申卜”庄曙梯期同枫 URDIR *加列LO KIT PAH量申让请:的杲嚏管璋员乏LIBOTt藩加列/el L M. s.i. runf丈|怜中I畀且机卄ldconf 1 1/t-11 F/j.tl4-It-IIfl*a-/ItWMfC */ 萨和 llb hlc1RealoitEiiS-Itfik cMpIIt-d!r jfl如果你的硬盘空间比较吃紧,或者有良好的磁盘清理习惯,那么不妨删除compile-dir 以及extracted-src-dir
20、 目录中 的内容,并且备份 downloaded-src-dir目录中的所有 6个源码包,日后有需要时可以再次从源码编译安装。测试,优化,整合 make,新旧版本gcc共存为了方便后面的测试以及与 make的整合,我们先用符号链接的 方式,实现新旧版本gcc共存系统上,按需调用。常规情况下,要用新版gcc来编译C源文件或用其它高级语言 编写的源文件,需要以/usr/local/new-exec-gcc-4.9.1/bi n/gcc这种绝对路径的形式来调用,如果仅输入命令gcc,则shell会调用旧版的gcc,也就是/usr/bin/gcc下的gcc,这是因为新版的gcc可执行文件所在绝对路径还
21、没有加入shell的命令搜索路径中,而搜索路径是一种环境变量,因此按理讲应该将 其加入环境变量,但是这样就会覆盖原有的gcc,或者产生歧义,shell无法判断用户的意图是要使用那一个。使用符号链接的方案可以避免上述问题。rootce ntos6-5vm 2rootce ntos6-5vm 3/usr/b in /gcc 4rootce ntos6-5vm 5gcc:/usr/b in /gcc1/gcc.1.gz依旧是先确定一下旧版gcc的可执行文件所在路径:bin# cd /# which gcc/usr/share/ma n/man/# whereis gcc/usr/lib/gcc /u
22、sr/libexec/gcc进入/usr/bin目录,创建一个指向新版gcc可执行文件所在路径的符号链接,记得要同时创建新版g+的相应链接:1rootce ntos6-5vm/# cd /usr/b in2rootce ntos6-5vmbin# pwd3/usr/b in45 rootce ntos6-5vm bin #In4.9.1/bi n/gccn ew-gcc-4-9-1rootce ntos6-5vmbin# In-s/usr/local/new-exec-gcc-s/usr/local/new-exec-gcc-4.9.1/bi n/g+n ew-g+4-9-1如此一来,shel
23、l还是搜索/usr/bin下的可执行文件,但是根据用户输入的命令来调用相应的文件,例如,用户输入gcc,则调用 /usr/bin/gcc,用户输入 new-gcc-4-9-1 ,则调用相应符号链接指向的原始文件。下面的截图验证了这一部分 讲述的内容:prt Hwwr -Mdlra7br/ritarv/taM - -ImnlwiiirMtan/ltth古空i*v mvu blnIE車和B 叭4寸釁擅俗令輸出Jf曹F:rlW丰倍息和門说 与(HflB *fi5HI 曲 Ktcc;HHj 廿1 户 妄T _ _. _一肚版處可城石女算的ponritureW本即症勒tk. 暨酌 fSlf : _- _
24、 : :师,秆*穴“刖輻出I日版.”时柢*惜乜,就刃相总的艮倩老,省圳 |比是在$和吕廉rer* *-44bU-Khrtidi - -m*i| *- trtfrissxptilK * -twilii - clii Qb|C疋-+ r JtMljfortMn“北 enj-blje-jhvA-cit呷惟 -町dMi -SlTh - |tv-hfiftr/usr/l$ 目-tc j-1 il-l.l/jrt -fclt-lJMiJ - mil Ji file - -tit k - j iv* *m- -i I lih - tc 1 - i*r r / yi*r1 wa 11 iiy| -idi ib
25、 l -1 i b j ivh Ou E1J Uk 注ith-ppl - li tiiCMnEgeiwr Lr Ini Id*llfll -rrrfhat 11|egcc * 4.4J 21124911 (Ifd Nt 4.4.T-4) (KO 1i/1 td Ziiir/hla 山* P*CMlfn.KTMi C1-1XM.1HTA1Q fPFFJi/uiTr/Utiiilntr-fm -gcc-iBt,t/UHx/g/gcc Li ! (4和217陽十INI gn还记得前面我们将自定义名称的新版编译器(n ew-gcc-4-9-1 )链接到同一个二进制可执行文件吗:rootce ntos6-5vmbin# In -s4.9.1/bi n/gccn ew-gcc-4-9-1这并不会产生冲突,现在, cc同一个新版的gcc,而关键是,/usr/local/new-exec-gcc-和new-gcc-4-9-1 实际都指向make这种自动编译大型项目的工具只会使用CC,因此修改cc指向的程序来让 make调用新版 的gcc编译软件源码就显得尤为重要。F面这张截图验证了上面我们的劳动成果:另一种办法是,从 make的配置输出可知,cc的值赋给了环境变量CC因此直接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全球农用无人机中国第一广东企业全球份额超75%
- 2026年兰州科技职业学院单招综合素质考试题库及答案详细解析
- 2026湖北武汉人才服务发展有限公司招聘派往武汉市国企工作备考题库及参考答案详解【新】
- 钢结构安装质量管理方案
- 2026年湖南省高速公路集团有限公司第一批社会招聘16人考试备考题库及答案解析
- 2026年超导材料临界温度测试方法与电阻温度曲线解读
- 2026荣成康派斯新能源车辆股份有限公司博士后科研工作站招聘3人考试参考题库及答案解析
- 2026年福州职业技术学院单招职业技能考试题库及答案详细解析
- 企业人事信息系统建设方案
- 企业供应链管理方案
- 《水库大坝震后安全检查技术指南》
- 风险和机遇识别、评价及控制措施表
- 《纸质文物修复与保护》课件-03纸质文物病害类型
- 国家临床重点专科心血管内科等13个专科评分标准(试行)
- 汽轮机组试车方案
- PCI围术期强化他汀治疗的获益和机制课件
- JJG 539-2016数字指示秤
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- 辽宁盘锦浩业化工“1.15”泄漏爆炸着火事故警示教育
- GB/T 14536.6-2008家用和类似用途电自动控制器燃烧器电自动控制系统的特殊要求
- GB/T 1408.3-2016绝缘材料电气强度试验方法第3部分:1.2/50μs冲击试验补充要求
评论
0/150
提交评论