docs/140444: [UPDATE] New Traditional Chinese translation of custom-gcc

Denny Lin dennylin93 at cnmc32.hs.ntnu.edu.tw
Tue Nov 10 14:10:03 UTC 2009


>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 at 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 at 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:



More information about the freebsd-doc mailing list