Date: Tue, 10 Nov 2009 22:03:34 +0800 (CST) From: Denny Lin <dennylin93@cnmc32.hs.ntnu.edu.tw> To: FreeBSD-gnats-submit@FreeBSD.org Subject: docs/140444: [UPDATE] New Traditional Chinese translation of custom-gcc Message-ID: <20091110140334.185386FC45D@mx.hs.ntnu.edu.tw> Resent-Message-ID: <200911101410.nAAEA2o1018955@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 140444 >Category: docs >Synopsis: [UPDATE] New Traditional Chinese translation of custom-gcc >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-doc >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Tue Nov 10 14:10:02 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Denny Lin >Release: FreeBSD 7.2-RELEASE-p4 amd64 >Organization: >Environment: System: FreeBSD cnmc32.hs.ntnu.edu.tw 7.2-RELEASE-p4 FreeBSD 7.2-RELEASE-p4 #0: Mon Oct 26 19:41:45 CST 2009 root@cnmc32.hs.ntnu.edu.tw:/usr/obj/usr/src/sys/CNMC32 amd64 >Description: New Traditional Chinese translation of "Using newer version of GCC and binutils with the FreeBSD Ports Collection." Should be put in doc/zh_TW.Big5/articles/custom-gcc. The attached files are also available at http://security-hole.info/~dennylin93/doc/zh_TW.Big5/articles/custom-gcc/. >How-To-Repeat: >Fix: --- Makefile begins here --- # # $FreeBSD$ # # Article: Using newer version of GCC and binutils with the FreeBSD Ports Collection DOC?= article FORMATS?= html WITH_ARTICLE_TOC?= YES INSTALL_COMPRESSED?= gz INSTALL_ONLY_COMPRESSED?= SRCS= article.sgml URL_RELPREFIX?= ../../../.. DOC_PREFIX?= ${.CURDIR}/../../.. .include "${DOC_PREFIX}/share/mk/doc.project.mk" --- Makefile ends here --- --- article.sgml begins here --- <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [ <!ENTITY % articles.ent PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Articles Entity Set//EN"> %articles.ent; ]> <article> <articleinfo> <title>配合 &os; Ports Collection 使用新版本的 <application>GCC</application> 與 <application>binutils</application></title> <author> <firstname>Martin</firstname> <surname>Matuska</surname> <affiliation> <address><email>mm@FreeBSD.org</email></address> </affiliation> </author> <pubdate>$FreeBSD$</pubdate> <legalnotice id="trademarks" role="trademarks"> &tm-attrib.freebsd; &tm-attrib.general; </legalnotice> <copyright> <year>2009</year> <holder>The &os; Documentation Project</holder> </copyright> <abstract> <para>此篇文件說明了如何從 &os; ports tree 使用新版本的 <application>GCC</application> 編譯器與 <application>binutils</application>。 自訂的 <application>GCC</application> 設定也是本文件討論範圍。</para> </abstract> </articleinfo> <sect1 id="intro"> <title>簡介</title> <para>在 &os; 8.0 裡,系統預設的編譯器為 <application>GCC</application> 版本 4.2.1。除此之外,系統本身也含有 <application>binutils</application> 版本 2.15。這些版本已經出幾年了,且不支援新的 CPU 指令集,如 <acronym>SSSE3</acronym>、<acronym>SSE4.1</acronym>、<acronym>SSE4.2</acronym> 等。礙於許可證的關係,這些程式較新的版本並不會被移植到系統內。幸好,仍然可以透過 &os; ports tree 使用新版本的 <application>GCC</application> 編譯器(如:版本 4.4)。</para> </sect1> <sect1 id="prerequisites"> <title>前提</title> <sect2 id="installing-binutils"> <title>從 ports 安裝 binutils</title> <para>若要使用所有 <application>GCC</application> 新版本的功能,必須安裝最新版本的 <application>binutils</application>。 雖然安裝新版本的 <application>binutils</application> 非必要條件,但若沒有安裝,將無法使用新 <acronym>CPU</acronym> 的指令集。</para> <para>若要從 &os; ports tree 安裝最新版本的 <application>binutils</application>,請下: <screen>&prompt.root; <userinput>cd /usr/ports/devel/binutils && make install</userinput></screen> </sect2> <sect2 id="installing-gcc"> <title>從 ports 安裝 GCC</title> <para>&os; ports tree 提供了數種新版本的 <application>GCC</application>。下面的範例是使用穩定的 4.4 版本。但是,可以安裝之前或更新的版本(如: <filename role="package">lang/gcc43</filename> 或 <filename role="package">lang/gcc45</filename>)。</para> <para>若要安裝上面提到的 <application>GCC</application> ports 之一,請下: <screen>&prompt.root; <userinput>cd /usr/ports/lang/<replaceable>gcc44</replaceable> && make install</userinput></screen> </sect2> </sect1> <sect1 id="configuring-ports-gcc"> <title>設定 ports 使用自訂版本的 <application>GCC</application></title> <para>使用從 &os; ports tree 安裝的 <application>GCC</application> 之前,必須先做一些額外的設定。<para> <sect2 id="adjusting-make.conf"> <title>調整 <filename>make.conf</filename></title> <para>將下列幾行加入 <filename>/etc/make.conf</filename> 檔案(視情況調整):</para> <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) CC=gcc44 CXX=g++44 CPP=cpp44 .endif</programlisting> <para>此外,可以手動設變數 <envar>${CC}</envar> 與 <envar>${CPP}</envar>。</para> <note> <para>上面的範裡是給 <application>GCC</application> 版本 4.4。若要使用 <command>gcc43</command> 將 <literal>「gcc44」</literal> 替換成 <literal>「gcc43」</literal>、 <literal>「4.4」</literal> 替換成 <literal>「4.3」</literal>,以此類推。</para> </note> </sect2> <sect2 id="adjusting-libmap.conf"> <title>調整 <filename>libmap.conf</filename></title> <para>許多 ports 的執行檔與 libraries 會連結到 libgcc_s 或 libstdc++。系統已有內建這些 libraries,但是是 就版本的 <application>GCC</application>(版本 4.2.1)。 rtld(和 ldd)正確的版本,將下列幾行加入 <filename>/etc/libmap.conf</filename> 檔案(視情況調整):</para> <programlisting>libgcc_s.so.1 gcc44/libgcc_s.so.1 libgomp.so.1 gcc44/libgomp.so.1 libobjc.so.3 gcc44/libobjc.so.2 libssp.so.0 gcc44/libssp.so.0 libstdc++.so.6 gcc44/libstdc++.so.6</programlisting> <note> <para>上面的範例是針對 <application>GCC</application> 版本 4.4。若要使用 <command>gcc43</command>,將 <literal>「gcc44」</literal> 替換成 <literal>「gcc43」</literal>,以此類推。值得注意的是,這些 libraries 都與系統本身的 libraries 相容。</para> </note> <warning> <para>有些 C++ 若這些 libraries 沒有設定好,可以無法執行。 若沒有辦法將所有的 libraries 設定好,建議至少 libstdc++.so 要正確。</para> </warning> </sect2> <sect2 id="custom-cflags"> <title>自訂 ports tree 使用的 <literal>CFLAGS</literal></title> <para>若要針對 ports tree 加自訂(系統內建不支援)的 <literal>CFLAGS</literal>,照著範例調整 <filename>/etc/make.conf</filename>:</para> <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) CC=gcc44 CXX=g++44 CPP=cpp44 CFLAGS+=-mssse3 .endif</programlisting> <para>可以完全取代 <literal>CFLAGS</literal>,也可以設定自訂的 <literal>CPUTYPE</literal>。我們建議設定自訂的 <literal>CPUTYPE</literal> 因為許多 ports 的優話參數以此變數為基礎。</para> </sect2> <sect2 id="excluding-unbuildable-ports"> <title>排除無法用新版本的 <application>GCC</application> 編譯的 ports。</title> <para>若要排除一些跟新版本的 <application>GCC</application> 有問題的 ports,依照範例調整 <filename>/etc/make.conf</filename>:</para> <programlisting>.if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44) .if empty(.CURDIR:M/usr/ports/net/openldap*) CC=gcc44 CXX=g++44 CPP=cpp44 .endif .endif</programlisting> <para>上面的範例安裝 <filename role="package">net/openldap</filename>* ports 時,不會使用 <command>gcc</command> 4.4。另外,也可以在同一行上設更多 ports:</para> <programlisting>.if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...</programlisting> </sect2> </sect1> <sect1 id="performance-imparct"> <title>對二進位執行檔之影響</title> <para>使用 <application>GCC</application> 版本 4.4 且 <acronym>SSSE3</acronym> 指令集有用到(若 <acronym>CPU</acronym> 支援)平均來講,效能可能提高 10% 。在某些測試當中,結果顯示效能有提昇超過 20%(如:處理多媒體時)。</para> <para>位於<ulink url="http://people.freebsd.org/~mm/benchmarks/perlbench/"></ulink> 的表格顯示了 &os; 系統內建的 <application>GCC</application> 版本與 <application>GCC</application> 版本 4.3、4.4 之比較。表格包含有各種 <literal>CFLAGS</literal> 的組合,使用的是 perlbench 的效能測試套件。</para> </sect1> </article> --- article.sgml ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20091110140334.185386FC45D>